如何找出导致冲突的Git提交?

时间:2013-08-10 14:37:23

标签: git conflict git-merge

我正在将上游更改合并到我的项目中,最近有很多提交产生了很多合并冲突。尝试一次解决所有问题是没有意义的。

如何找出哪些提交会产生冲突?以下任何一种都是可以接受的:

  • 一旦发现冲突就让Git停止合并的方法
  • 一种让Git按时间顺序列出所有冲突提交的方法
  • 让我按时间顺序一个接一个地解决冲突的其他任何事情,不涉及一次合并一些提交,希望偶然发现冲突

3 个答案:

答案 0 :(得分:16)

您可以尝试git imerge:这将逐个应用您的提交,让您有机会逐步(意味着你可以启动一个rebase,打断它,稍后再恢复!)。

您可以在此处看到Incremental merge vs. direct merge vs. rebase之间的比较。

答案 1 :(得分:5)

Michael Haggerty还有一个名为git-mergemate的工具,它有一个find-conflict命令:

  

git-mergemate find-conflict BRANCH1..BRANCH2

     

使用二分法确定BRANCH2上最早的提交     合并到BRANCH1时会导致冲突。实际上不     保留任何合并。

     

git-mergemate find-conflict BRANCH1...BRANCH2

     

使用二分法找到一对最早的提交(一个来自     每个分支)不干净地合并。实际上不保留     任何合并。

git imerge可以用来进行增量合并并解决冲突,尽管它在find-conflicts中没有等效git-mergemate

答案 2 :(得分:2)

您是否有任何理由不想仅使用rebase(非交互式)同步上游分支中的更改?如果每次提交都存在冲突,它将停止,然后您可以在解决时恢复rebase。这就像增量合并,它内置于Git中,不需要外部插件/工具:

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

关于强制推送重写提交的警告

注意,当然,重新定位本地分支将改变其提交的sha ID。如果您已经将要重新绑定的提交推送到远程,那么您需要强制推送新提交以覆盖旧提交,如果您与其他人共享您的分支,这可能会造成潜在问题。您可以在以下方面了解有关这些问题的更多信息: