git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: possibly a spurious conflict in a three way merge

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Aug 7, 2014, 18:52 UTC
Message-ID
<20140807185243.GE12427@google.com>
In-Reply-To
<53E3A99E.1090102@gmail.com>
Hi,
meanlogin@gmail.com wrote:
Show 23 quoted lines
> 2. commit test.txt to master:
> line1
> line1
>
> 3. branch and checkout branch1
> 4. make and commit the following change to branch1:
> #line1
> #line2
>
> 5. checkout master
> 6. make and commit the following change to master:
> line1
> #line2
>
> 7. merge branch1, git sees a conflict:
> <<<<<<< HEAD
> line1
> =======
> #line1
> >>>>>>> branch1
> #line2
>
> Why?
Thanks for a clear example.  On branch1 you made the following change:
 (a) modify lines 1 and 2
On master, you made a different change:
 (b) just modify line 2

The changes touch the same chunk of lines and don't produce the same result there. Git is being conservative and letting you know that the two branches didn't agree about what line 1 should say.

On the other hand, if you had a larger files and on branch1 made the following change:

 (a) modify lines 1 and 101
and on master, you made a different change:
 (b) just modify line 101

then the changes are touching different parts of the code and are merged independently. The result would be a clean merge where lines 1 and 101 are both modified.

Git's conservatism can be helpful when working with code, where adjacent lines are likely to be affecting a single behavior and the conflict can help the operator to know to be extra careful. It makes less sense for line-oriented input where every line is independent.

If you are often making changes to a line-oriented file, it may make sense to set up a custom merge driver to override git's merge behavior for that file. See 'Defining a custom merge driver' in gitattributes(5) for details about how that works.

Hope that helps, Jonathan

Previous: meanlogin@gmail.com
Message 2 of 2 in “possibly a spurious conflict in a three way merge”
  1. meanlogin@gmail.comAug 7, 2014
  2. Jonathan NiederAug 7, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.