threads / discuss / 40623

Question about about a trivial merge conflict that git should resolve alone

Subject: Question about about a trivial merge conflict that git should resolve alone

## tl;dr

2 messages between Oct 23, 2015 and Oct 23, 2015.

replies: 1people: 2as markdown or json

Francis Moreau· Oct 23, 2015, 13:07 UTC · lore
Hi,
I have a simple merge conflict use case:

$ mkdir foo $ cd foo/ $ git init $ echo line1 > a $ git add . $ git commit -q -m init $ echo line2 >>a $ git commit -a -q -m "add line2" $ git checkout -b foo HEAD~1 $ git cherry-pick -x master $ echo line3 >>a $ git stage a $ git commit -q -m "add line3" $ git checkout master $ git merge foo $ git diff diff --cc a index c0d0fb4,83db48f..0000000

--- a/a
+++ b/a
@@@ -1,2 -1,3 +1,6 @@@
line1
line2
++<<<<<<< HEAD
++=======
+ line3
++>>>>>>> foo

Why does git think there's a conflict here since the "line2" string
was added in both branch by the same commit ?

Thanks.
-- 
Francis
Johannes Schindelin· Oct 23, 2015, 14:52 UTC · re: Francis Moreau · lore

Re: Question about about a trivial merge conflict that git should resolve alone

Hi Francis,
On Fri, 23 Oct 2015, Francis Moreau wrote:
Show 32 quoted lines
> I have a simple merge conflict use case:
> 
> $ mkdir foo
> $ cd foo/
> $ git init
> $ echo line1 > a
> $ git add .
> $ git commit -q -m init
> $ echo line2 >>a
> $ git commit -a -q -m "add line2"
> $ git checkout -b foo HEAD~1
> $ git cherry-pick -x master
> $ echo line3 >>a
> $ git stage a
> $ git commit -q -m "add line3"
> $ git checkout master
> $ git merge foo
> $ git diff
> diff --cc a
> index c0d0fb4,83db48f..0000000
> --- a/a
> +++ b/a
> @@@ -1,2 -1,3 +1,6 @@@
> line1
> line2
> ++<<<<<<< HEAD
> ++=======
> + line3
> ++>>>>>>> foo
> 
> Why does git think there's a conflict here since the "line2" string
> was added in both branch by the same commit ?

This is intentional, because what actually happens is that Git figures out that line2 & line3 were added in one branch, but only line2 in the other, and it helpfully reduces the conflict to the difference between the two.

The rationale is that you do not know which version is correct: was line2 sufficient, or do you really also need line3?

Ciao, Johannes

← back to recent threads