我正在将上游更改合并到我的项目中,最近有很多提交造成了很多合并冲突。尝试一次解决所有问题是没有意义的。
如何找出哪些提交会产生冲突?以下任何一项都是可以接受的:
- 一种让 Git 在发现冲突后立即停止合并的方法
- 一种让 Git 按时间顺序列出所有冲突的提交的方法
- 任何其他可以让我按时间顺序一一解决冲突的方法,不涉及一次合并几个提交,希望偶然发现冲突
你可以试试git imerge:它会一个一个地应用你的提交,让你有机会增量地做一个 rebase (这意味着你可以开始一个 rebase,中断它,稍后再恢复它!)。
您可以在此处看到增量合并与直接合并与变基之间的比较。
Michael Haggerty 还有一个名为的工具git-mergemate
,它有一个find-conflict
命令:
git-mergemate find-conflict BRANCH1..BRANCH2
使用二分法来确定
BRANCH2
合并到BRANCH1
. 实际上不保留任何合并。
git-mergemate find-conflict BRANCH1...BRANCH2
使用二分法找到一对没有完全合并的最早提交(每个分支一个)。实际上不保留任何合并。
git imerge
可用于进行增量合并并一路解决冲突,尽管它没有 in 的等价find-conflicts
物git-mergemate
。
您是否有任何理由不只是想使用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。如果您已经将要变基的提交推送到远程,那么您需要强制推送新提交以覆盖旧提交,如果您与其他人共享您的分支,这可能会造成潜在问题. 您可以在以下位置了解有关这些问题的更多信息: