如何检查两个分支的合并冲突,而不进行实际的合并?

89

因为我们项目的发布步骤,我无法合并两个分支,但是我想知道它们之间是否存在合并冲突。我该怎么做?


3
可能是 Is there a git-merge --dry-run option? 的重复问题。 - ks1322
2个回答

143

假设你正在master分支上,并且你想测试是否可以将dev分支无冲突地合并到master

# In the master branch
git merge dev --no-ff --no-commit

之后,您将能够知道是否存在冲突。

要返回到正常情况,只需中止合并:

git merge --abort

根据git文档:

--ff
如果合并被解决为快速转发,则不生成合并提交,仅更新分支指针。这是默认行为。

--no-ff
即使合并被解决为快速转发,也会生成一个合并提交。

--commit
执行合并并提交结果。此选项可用于覆盖--no-commit。

--no-commit
使用--no-commit执行合并,但假装合并失败并且不自动提交,以便用户有机会在提交之前检查和进一步调整合并结果。


4
我已经多次采用这个解决方案,而且我知道我会继续使用它!它非常有效。 - Sulphur
还可以参考这个非常相似问题的很好的答案:https://dev59.com/13RB5IYBdhLWcg3wz6ad#6283843 - mindplay.dk

3

针对使用案例提供答案 - 你正在一个特性分支上进行更改。同时,另一位同事对共享文件进行更改并合并到主干分支。现在你准备进行合并。此时你将面临合并冲突的问题。

确保你拥有主干分支的最新版本。

git fetch
git checkout trunk
git pull

切换回功能分支

git checkout feature

在特性分支中,模拟将其合并到主干分支(trunk branch)时采用快进模式(--no-ff)。使用--no-commit可以防止自动提交。
git merge trunk --no-ff --no-commit

检查文件。

  • [<<<<<<< HEAD]和[=======]之间的行是特性分支中的行。
  • [=======]和[>>>>>>> trunk]之间的行是主干分支中的行。

要放弃模拟合并并返回原始状态,请运行

git merge --abort

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接