gitgit-merge

Is there a "theirs" version of "git merge -s ours"?


When merging topic branch "B" into "A" using git merge, I get some conflicts. I know all the conflicts can be solved using the version in "B".

I am aware of git merge -s ours. But what I want is something like git merge -s theirs.

Why doesn't it exist? How can I achieve the same result after the conflicting merge with existing git commands? (git checkout every unmerged file from B)

The "solution" of just discarding anything from branch A (the merge commit point to B version of the tree) is not what I am looking for.


Solution

  • A similar alternative is the --strategy-option (short form -X) option, which accepts theirs. For example:

    git checkout branchA
    git merge -X theirs branchB
    

    However, this is more equivalent to -X ours than -s ours. The key difference being that -X performs a regular recursive merge, resolving any conflicts using the chosen side, whereas -s ours changes the merge to just completely ignore the other side.

    In some cases, the main problem using -X theirs instead of the hypothetical -s theirs is deleted files. In this case, just run git rm with the name of any files that were deleted:

    git rm {DELETED-FILE-NAME}
    

    After that, the -X theirs may work as expected.

    Of course, doing the actual removal with the git rm command will prevent the conflict from happening in the first place.