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.
If you want to do it as a one-off, the single-line command is:
To configure git’s merge to permanently ignore all upstream changes to a locally-changed file:
(
trueabove is just the unixtruecommand, its success says it made the local version look right, in this case by doing nothing to it. You can of course get more sophisticated with your merge commands.)I think you don’t want
merge --strategy=oursor--strategy-option=ours, those apply to entire merges.