I don't want a visual merge tool, and I also don't want to have to vi the conflicted file and manually choose the between HEAD (mine) and the imported change (theirs). Most of the time I either want all of their changes or all of mine. Commonly this is because my change made it upsteam and is coming back to me through a pull, but may be slightly modified in various places.
Is there a command line tool which will get rid of the conflict markers and choose all one way or another based on my choice? Or a set of git commands which I can alias myself to do each one.
# accept mine
[email protected] ~/linus $ git merge test-branch
CONFLICT (content): Merge conflict in Makefile
Automatic merge failed; fix conflicts and then commit the result.
[email protected] ~/linus $ git checkout Makefile
error: path 'Makefile' is unmerged
[email protected] ~/linus $ git reset --hard HEAD Makefile
fatal: Cannot do hard reset with paths.
git reset HEAD Makefile; rm Makefile; git checkout Makefile
git show test-branch:Makefile > Makefile; git add Makefile;
The solution is very simple.
git checkout <filename> tries to check out file from the index, and therefore fails on merge.
What you need to do is (i.e. checkout a commit):
To checkout your own version you can use one of:
git checkout HEAD -- <filename>
git checkout --ours -- <filename>
git show :2:<filename> > <filename> # (stage 2 is ours)
To checkout the other version you can use one of:
git checkout test-branch -- <filename>
git checkout --theirs -- <filename>
git show :3:<filename> > <filename> # (stage 3 is theirs)
You would also need to run 'add' to mark it as resolved:
git add <filename>