Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I find out which Git commits cause conflicts?

Tags:

I'm merging upstream changes to my project, and recently there were a lot of commits that created a lot of merge conflicts. It doesn't make sense to try to resolve them all at once.

How can I find out which commits create a conflict? Any of the following are acceptable:

  • A way to make Git stop merging as soon as it finds a conflict
  • A way to make Git list all the commits that conflicted, in chronological order
  • Anything else that lets me resolve the conflicts one-by-one, in chronological order, that doesn't involve merging a few commits at a time hoping to stumble upon the conflicts
like image 519
Davis Sorenson Avatar asked Aug 10 '13 14:08

Davis Sorenson


Video Answer


2 Answers

You can gives git imerge a try: that will apply your commits one by one, giving you the chance to do a rebase incrementally (meaning you can start a rebase, interrupt it, resume it later!).

You can see here a comparison between Incremental merge vs. direct merge vs. rebase.

like image 97
VonC Avatar answered Sep 21 '22 18:09

VonC


Michael Haggerty also has a tool called git-mergemate that has a find-conflict command:

git-mergemate find-conflict BRANCH1..BRANCH2

Use bisection to determine the earliest commit on BRANCH2 that causes a conflict when merged to BRANCH1. Don't actually retain any merges.

git-mergemate find-conflict BRANCH1...BRANCH2

Use bisection to find a pair of earliest commits (one from each branch) that do not merge cleanly. Don't actually retain any merges.

git imerge can be used to do an incremental merge and resolve conflicts along the way, though it does not have the equivalent of find-conflicts in git-mergemate.

like image 31
John Szakmeister Avatar answered Sep 19 '22 18:09

John Szakmeister