What exactly is a merge conflict?

GitGit Merge

Git Problem Overview


I have made a git repository and added a text file to it. This is 100% for learning purpose.

  1. I added "1" to the text file and committed it to master.

  2. Created a new branch from master and appended "2".

  3. Finally, created a branch from master and appended "3".

Could you please explain how a conflict may occur in this, or any other, scenario?

Git Solutions


Solution 1 - Git

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?".

Solution 2 - Git

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.

Solution 3 - Git

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser3693167View Question on Stackoverflow
Solution 1 - GitVonCView Answer on Stackoverflow
Solution 2 - GitCalebView Answer on Stackoverflow
Solution 3 - Gitfaisal_kkView Answer on Stackoverflow