TIL of a quick way to quickly resolve merge conflicts from the command line, in a situation where you know you want to fully accept or reject the merging branch’s changes.
I was recently in a situation at work where I had branched off a feature branch for quite some time, then wanted to merge my changes back in to the base branch. Unfortunately, this resulted in a bunch of merge conflicts since the branch was still somewhat in active development while I was branched off. The number of files impacted was somewhere between 15 and 20.
I knew that I wanted to keep their changes for certain files, and my changes for others, but I wasn’t looking forward to going through and manually resolving conflicts file by file…
Luckily I found this stack overflow post which provided an excellent way to resolve conflicts from the command line in just this situation. For files where I wanted to keep all of my changes, I could execute…
git checkout --ours -- path/to/file
…and all of “our” changes (made in my branch) would be kept in the conflict resolution.
The opposite command also exists: in the situation where I want to keep all of “their” changes (the changes made in the base branch in this situation) I could execute
git checkout --theirs -- /path/to/file
To reiterate, these commands resolve ALL conflicts with either “our” changes or “their” changes, so they should not be used if you need to carefully resolve a merge conflict with a combination of both changes in a file.
Finally, if I just wanted to accept “our” changes or “their” changes in all files that contained conflicts, I could just run:
git merge --strategy-option ours git merge --strategy-option theirs
These commands saved me a bunch of time, and worked like a charm.