22

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

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

  • 一种让 Git 在发现冲突后立即停止合并的方法
  • 一种让 Git 按时间顺序列出所有冲突的提交的方法
  • 任何其他可以让我按时间顺序一一解决冲突的方法,不涉及一次合并几个提交,希望偶然发现冲突
4

3 回答 3

18

你可以试试git imerge:它会一个一个地应用你的提交,让你有机会增量地做一个 rebase (这意味着你可以开始一个 rebase,中断它,稍后再恢复它!)。

您可以在此处看到增量合并与直接合并与变基之间的比较。

于 2013-08-10T14:55:02.803 回答
6

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

git-mergemate find-conflict BRANCH1..BRANCH2

使用二分法来确定BRANCH2合并到BRANCH1. 实际上不保留任何合并。

git-mergemate find-conflict BRANCH1...BRANCH2

使用二分法找到一对没有完全合并的最早提交(每个分支一个)。实际上不保留任何合并。

git imerge可用于进行增量合并并一路解决冲突,尽管它没有 in 的等价find-conflictsgit-mergemate

于 2013-08-10T16:11:06.833 回答
1

您是否有任何理由不只是想使用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。如果您已经将要变基的提交推送到远程,那么您需要强制推送新提交以覆盖旧提交,如果您与其他人共享您的分支,这可能会造成潜在问题. 您可以在以下位置了解有关这些问题的更多信息:

于 2013-08-10T17:43:20.187 回答