# git rerere and diff3

3 messages from 2018-06-26 to 2018-06-26. Participants: Nicolas Dechesne, Junio C Hamano.
Thread: https://gitlist.dev/t/48782

## Nicolas Dechesne, 2018-06-26 13:25

Subject: git rerere and diff3
Message-ID: <CAP71WjzHffLRCDbjvF7qpexjXDMFcJkaPpEn=AtbSMCJd6QkBQ@mail.gmail.com>
URL: https://gitlist.dev/e/CAP71WjzHffLRCDbjvF7qpexjXDMFcJkaPpEn%3DAtbSMCJd6QkBQ%40mail.gmail.com

```
hi there,

i have noticed that merge.conflictstyle has an impact on the rerere
resolution. looking briefly at the source code, it seems that git
tries to discard the common ancestor diff3 bits, but what I am seeing
is that if i do the following then it fails:

1. from a clean rr-cache state, with merge.conflictsytle=diff3, git
merge <branch with conflict>, resolve the conflicts, then commit
2. undo the previous merge, remove merge.conflictstyle=diff3 (disable
diff3) and merge the *same* branch, then rerere won't fix the
conflicts

Is that the expected behavior? I am not familiar with git code, but
browsing rerere.c makes me think that it should have worked..

Of course, if I merge the same branch without modifying
merge.conflictstyle, then the merge conflicts are properly resolved by
rerere.

thanks!

```

## Junio C Hamano, 2018-06-26 19:05

Subject: Re: git rerere and diff3
Message-ID: <xmqq1sctl676.fsf@gitster-ct.c.googlers.com>
URL: https://gitlist.dev/e/xmqq1sctl676.fsf%40gitster-ct.c.googlers.com
In-Reply-To: <CAP71WjzHffLRCDbjvF7qpexjXDMFcJkaPpEn=AtbSMCJd6QkBQ@mail.gmail.com>

```
Nicolas Dechesne <nicolas.dechesne@linaro.org> writes:

> i have noticed that merge.conflictstyle has an impact on the rerere
> resolution. looking briefly at the source code, it seems that git
> tries to discard the common ancestor diff3 bits, but what I am seeing
> is that if i do the following then it fails:
>
> 1. from a clean rr-cache state, with merge.conflictsytle=diff3, git
> merge <branch with conflict>, resolve the conflicts, then commit
> 2. undo the previous merge, remove merge.conflictstyle=diff3 (disable
> diff3) and merge the *same* branch, then rerere won't fix the
> conflicts

It is possible that the conflict left when making the same merge are
actually different when using these two conflict styles.  IOW, if
the merge produces

	<<<
	side A
	|||
	common
	===
	side B
	>>>

when diff3 style is chosen, but if the same merge results in

	<<<
	side A'
	===
	side B'
	>>>

where side A' is not identical to side A (or B' and B are not
identical), then we will fail to find the previously recorded
resolution.


```

## Nicolas Dechesne, 2018-06-26 19:37

Subject: Re: git rerere and diff3
Message-ID: <CAP71Wjxxx=mNFUAOn331vjqqf77mkBgU_hE+SKoTuszx6MMjvg@mail.gmail.com>
URL: https://gitlist.dev/e/CAP71Wjxxx%3DmNFUAOn331vjqqf77mkBgU_hE%2BSKoTuszx6MMjvg%40mail.gmail.com
In-Reply-To: <xmqq1sctl676.fsf@gitster-ct.c.googlers.com>

```
On Tue, Jun 26, 2018 at 9:05 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> Nicolas Dechesne <nicolas.dechesne@linaro.org> writes:
>
> > i have noticed that merge.conflictstyle has an impact on the rerere
> > resolution. looking briefly at the source code, it seems that git
> > tries to discard the common ancestor diff3 bits, but what I am seeing
> > is that if i do the following then it fails:
> >
> > 1. from a clean rr-cache state, with merge.conflictsytle=diff3, git
> > merge <branch with conflict>, resolve the conflicts, then commit
> > 2. undo the previous merge, remove merge.conflictstyle=diff3 (disable
> > diff3) and merge the *same* branch, then rerere won't fix the
> > conflicts
>
> It is possible that the conflict left when making the same merge are
> actually different when using these two conflict styles.  IOW, if
> the merge produces
>
>         <<<
>         side A
>         |||
>         common
>         ===
>         side B
>         >>>
>
> when diff3 style is chosen, but if the same merge results in
>
>         <<<
>         side A'
>         ===
>         side B'
>         >>>
>
> where side A' is not identical to side A (or B' and B are not
> identical), then we will fail to find the previously recorded
> resolution.

well, you're rigth.. that's what's happening...

=== with conflictstyle=merge
diff --cc arch/arm64/configs/defconfig
index 3cfa8ca26738,d53a1b00ad82..000000000000
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@@ -356,7 -334,7 +357,11 @@@ CONFIG_GPIO_PCA953X=
  CONFIG_GPIO_PCA953X_IRQ=y
  CONFIG_GPIO_MAX77620=y
  CONFIG_POWER_AVS=y
++<<<<<<< HEAD
 +CONFIG_ROCKCHIP_IODOMAIN=y
++=======
+ CONFIG_QCOM_CPR=y
++>>>>>>> tracking-qcomlt-8016-dvfs
  CONFIG_POWER_RESET_MSM=y
  CONFIG_POWER_RESET_XGENE=y
  CONFIG_POWER_RESET_SYSCON=y

=== with conflictstyle=diff3
diff --cc arch/arm64/configs/defconfig
index 3cfa8ca26738,d53a1b00ad82..000000000000
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@@ -355,8 -333,8 +356,14 @@@ CONFIG_GPIO_XGENE_SB=
  CONFIG_GPIO_PCA953X=y
  CONFIG_GPIO_PCA953X_IRQ=y
  CONFIG_GPIO_MAX77620=y
++<<<<<<< HEAD
 +CONFIG_POWER_AVS=y
 +CONFIG_ROCKCHIP_IODOMAIN=y
++||||||| merged common ancestors
++=======
+ CONFIG_POWER_AVS=y
+ CONFIG_QCOM_CPR=y
++>>>>>>> tracking-qcomlt-8016-dvfs
  CONFIG_POWER_RESET_MSM=y
  CONFIG_POWER_RESET_XGENE=y
  CONFIG_POWER_RESET_SYSCON=y

that explains it.. it was simpler than what I thought..

thanks!

```
