可以告诉我,如果合并会冲突而没有实际合并?

是否有可能知道合并是否会发生冲突,而不触摸工作树? 我不想触摸工作树,因为我不想让它检出。 如果我想要查看几个分支的信息,那将需要很长时间。

我假设你只是想在事实上尝试合并之前发现自己陷入了多大的困境……并且在合并失败之后重置为最后一次提交相对容易,所以我不会感到惊讶是预期的方法。

也就是说,如果你真的不想在工作树上触摸你现有的文件 – 你可以创build一个补丁并对目标分支进行testing。 这也具有显示对哪些文件进行了哪些更改的好处 – 只需在文本编辑器中打开补丁文件即可。

 git checkout -b mycrazybranch [change some stuff...] git add . git commit -m "changed some stuff" git format-patch master --stdout > crazy.patch git checkout master git apply crazy.patch --check [all good! cleanup...] rm crazy.patch 

正如你所看到的,这将创build一个补丁文件,然后你可以用–checktesting它,看看是否有错误,然后删除补丁文件。

看到有冲突后,你可以做git merge --abort

作为已有答案的总结,有两种方法来检查是否会出现合并冲突

git format-patch $(git merge-base branch1 branch2)..branch2 --stdout | git apply --check -

请注意,当您运行上述命令时,您当前的分支应该是分支1

其他方式:

 git merge --no-commit branch2 # check the return code here git merge --abort 

不完全如此。 但是你可以使用–no-commit选项,所以在合并之后它不会自动提交结果。 通过这种方式,你可以检查,如果需要的话,可以撤消合并,而不会搞乱提交树。