Как узнать, какие git-коммиты вызывают конфликты?

я объединяю восходящие изменения в свой проект, и в последнее время было много коммитов, которые создали много конфликтов слияния. Нет смысла пытаться разрешить их все сразу.

Как я могу узнать, какие коммиты создают конфликт? Любое из следующих приемлемо:

  • способ заставить Git прекратить слияние, как только он найдет конфликт
  • способ сделать git список всех коммитов, которые конфликтуют, в хронологическом порядке заказ
  • все остальное, что позволяет мне разрешать конфликты один за другим, в хронологическом порядке, что не включает слияние нескольких коммитов за раз, надеясь наткнуться на конфликты

3 ответов


вы можете дает git imerge a try: это будет применять ваши коммиты один за другим, давая вам возможность сделать rebase постепенно (это означает, что вы можете начать перебазирование, прервать его, возобновить его позже!).

вы можете увидеть здесь сравнение между инкрементное слияние против прямого слияния против rebase.


Майкл Хаггерти также имеет инструмент под названием git-mergemate что есть :

git-mergemate find-conflict BRANCH1..BRANCH2

используйте bisection для определения самой ранней фиксации на BRANCH2 что вызывает конфликт при объединении в BRANCH1. Не на самом деле сохраняйте любые слияния.

git-mergemate find-conflict BRANCH1...BRANCH2

используйте bisection, чтобы найти пару самых ранних коммитов (один из каждая ветвь), которые не сливаются чисто. Не сохраняйте любые слияния.

git imerge может использоваться для инкрементного слияния и разрешения конфликтов по пути, хотя он не имеет эквивалента find-conflicts на git-mergemate.


есть ли причина, по которой вы не просто хотите использовать rebase (неинтерактивно) для синхронизации с изменениями в нефтедобывающей отрасли? Он остановится, если есть конфликт на каждого коммита, а затем вы можете возобновить перебазировать, когда это закончится. Это похоже на инкрементное слияние, и оно встроено прямо в Git, нет необходимости во внешнем плагине/инструменте:

git fetch <remote>
git rebase <remote>/<upstream-branch>
# Conflict on commit X, resolve conflict, then continue the rebase
git rebase --continue

предупреждение о принудительном нажатии переписанных коммитов

обратите внимание, конечно, что перебазирование локальная ветвь изменит идентификаторы sha своих коммитов. Если вы уже передвинули коммиты, которые хотите перебазировать на свой пульт, вам нужно будет принудительно нажать новые коммиты, чтобы перезаписать старые, что может создать потенциальную проблему, если Вы делитесь своей веткой с другими людьми. Вы можете узнать больше об этих проблемах в: