预测合并冲突的方法是进行合并。1使用临时分支来执行此操作:
git checkout -b test master
git merge feature1
git merge feature2
git merge feature3
如果一切顺利,则合并工作。现在,如果您愿意,可以使用这个最终合并作为master 本身的结果,方法是执行快进 操作以将master 向上移动以匹配test:
git checkout master
git merge --ff-only test # --ff-only means "fail if fast-forward is not possible"
或者干脆delete分支test如果你不想这样做和/或合并失败。如果合并失败,请使用 git merge --abort 退出它,如脚注 1 或 git reset --hard(执行相同操作)。然后使用git checkout master 和git branch -D test:
git merge --abort # if needed
git checkout master
git branch -D test
在上面使用单独的test 分支的唯一原因是避免在我们完成所有三个合并之前移动master。但是由于分支名称对于每个存储库都是私有的,因此没有任何要求来执行此操作:您可以只进行合并,然后回滚(使用git reset --hard)到以前的状态,如果你不这样做'不喜欢结果。只是不要git push 提交,或者将它们提供给git fetch,直到你得到你喜欢的结果。
1您可以在不提交的情况下进行测试合并,如果您愿意,可以使用git merge --abort 假装您从未运行过测试。但是,当您需要进行多次合并时,这不起作用,就像您的问题一样。
八达通合并
不过,还有另一个选项,Git 称之为 octopus merges。 (注意:您不能使用 GitHub 执行这些操作,并且可能无法使用其他一些 Web 界面。)要进行一次将所有三个功能组合到 master 的章鱼合并:
git checkout master
git merge feature1 feature2 feature3
如果有任何冲突,章鱼合并将失败。
(我从未在实际工作中真正使用过章鱼合并。它们无法实现常规合并无法做到的任何事情,而且人们觉得它们令人困惑,所以我倾向于坚持使用常规合并。)