Let's suppose that I get a merge conflict on foo/bar.txt
when running this:
$ git checkout A
$ git merge B
I'd like to automatically resolve the conflict by taking foo/bar.txt
from branch A. (I know what I'm doing, and I do need this. The version in branch B is wrong, and I don't care about losing changes in the working tree in this case.) It seems that I can do it by running these commands:
$ git reset foo/bar.txt
$ git checkout foo/bar.txt
Is there a simpler, single-command solution?
Unfortunately these commands change foo/bar.txt
even if there is no conflict, and I don't want that. If there is no conflict, I want want to keep foo/bar.txt
in whatever state git merge B
has left it.
So I need a Unix shell command, which would detect if there is a conflict in foo/bar.txt
, and if there is, it would resolve the conflict by taking the version of foo/bar.txt
from the current branch. It wouldn't do anything else, i.e. it wouldn't modify other files, it wouldn't commit the changes, and it wouldn't change foo/bar.txt
if there is no conflict in that file.
You can specify the merge strategy option ours
to the recursive
(the default) merge strategy. It will do a normal merge, but in case of conflicting hunks will choose the version of the current branch.
git checkout A
git merge -Xours B