git可以告诉我合并是否会在没有实际合并的情况下发生冲突?

时间:2011-06-13 20:07:14

标签: git

是否可以在不触及工作树的情况下知道合并是否会发生冲突?我不想触摸工作树,因为我不想让它签出。如果我想在几个分支机构看到这些信息,那将需要很长时间。

4 个答案:

答案 0 :(得分:94)

我假设您只是想知道在实际尝试合并之前您遇到了多少麻烦...并且在合并失败后重置为最后一次提交相对容易,所以我不会如果这是预期的方法,我会感到惊讶。

那就是说,如果你真的不想触摸工作树中的现有文件 - 你可以创建一个补丁并对目标分支进行测试。这样做的好处是可以准确显示对哪些文件进行了哪些更改 - 只需在文本编辑器中打开补丁文件。

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

如您所见,这将创建一个补丁文件,然后您可以使用--check进行测试,看看是否有任何错误,然后删除补丁文件。

答案 1 :(得分:74)

在看到存在冲突后,您可以git merge --abort

答案 2 :(得分:55)

作为现有答案的摘要,有两种方法可以检查是否存在合并冲突

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

注意,当您在命令

上运行时,您当前的分支应为branch1

另一种方式:

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

答案 3 :(得分:21)

不完全那样。但是您可以使用--no-commit选项,因此它不会在合并后自动提交结果。通过这种方式,您可以检查并在需要时撤消合并,而不会弄乱提交树。