Re: Improving merge of tricky conflicts
- From
Jeff King <peff@peff.net>
- Date
- Jul 22, 2020, 07:45 UTC
- Message-ID
- <20200722074530.GB3306468@coredump.intra.peff.net>
- In-Reply-To
- <4df975f0-e4b1-afa1-cac1-f38e6d31a0d8@kdbg.org>
On Wed, Jul 22, 2020 at 07:50:08AM +0200, Johannes Sixt wrote:
Show 8 quoted lines
> Am 22.07.20 um 01:29 schrieb B. Stebler: > > I have been looking for a tool to display merge conflicts, that instead > > of showing the two versions of the conflicting section, would show the > > diff for that section in both conflicting commits. > > Perhaps you want to configure `merge.conflictStyle=diff3`? It does not > exactly show a diff, but it writes the base version of the conflicted > part in addition to "ours" and "theirs".
Yeah, I find diff3 is usually sufficient. But the contents of the base, "ours", and "theirs" sides are also available in the index:
# diff between base (stage 1) and ours (stage 2) git diff :1:file :2:file
# diff between base (stage 1) and theirs (stage 3) git diff :1:file :3:file
I thought we had added nice aliases for "ours" and "theirs" instead of the hard-to-remember stage numbers, but I think we only did so for things like "git checkout --ours", etc.
The big downside here, of course, is that it's showing the diff for the whole file, not just one hunk (on the other hand, I often find the trickiest conflicts are ones where the changes unexpectedly span multiple hunks).
There's also git-mergetool, which uses the information in those stages to feed content to other tools, which may show conflicts in more advanced ways. I don't have opinions on any of the particular tools it supports, but "git mergetool --tool-help" might be a good place to start exploring.
-Peff