What exactly is a merge conflict?

You will have a conflict if you merge:

  • branch2 to master (no conflict)
  • branch3 to master (conflict):

That is because:

  • The common ancestor would be master (with a second line empty)
  • the source content is branch3 (with a second line including "3")
  • the destination content is on latest of master (with a second line including "2", from the merge of branch2 to master)

Git will ask you to choose which content to keep ("3", "2", or both).

First, do the merges after:

git config merge.conflictstyle diff3

See "Fix merge conflicts in Git?".


Notes:

  • With Git 2.30 (Q1 2021), a new default merge strategy is in place: ORT ("Ostensibly Recursive's Twin"), with clearer conflict messages (Gti 2.36, Q2 2022)

  • you can preview those conflicts with (Git 2.38, Q3 2022):

    git merge-tree --write-tree --no-messages branch1 branch2
    

    (That would not touch the index or working tree!)


A merge conflict happens when two branches both modify the same region of a file and are subsequently merged. Git can't know which of the changes to keep, and thus needs human intervention to resolve the conflict.

In this case, your steps 2 and 3 create two branches that have conflicting changes.


I understand this is an old question but in case you would like to know in an intuitive way the algorithms used by Git to compare two files.It will clarify the doubts on how overlapping regions works with diff.

Here is an explanation of one of the popular algorithms which was developed by Eugene W. Myers. In this approach finding the shortest edit script (SES) is modelled as a graph search. Here is really good article by James Coglan on the same with an example - The Myers diff algorithm

Tags:

Git

Git Merge