我正在合并一个可能有很多冲突的远程分支机构。我怎么知道它是否会有冲突?
我没看到任何类似于,git合并的预演。
我正在合并一个可能有很多冲突的远程分支机构。我怎么知道它是否会有冲突?
我没看到任何类似于,git合并的预演。
当前回答
我很惊讶没有人建议使用补丁。
假设你想测试从your_branch到master的合并(我假设你已经检查了master):
$ git diff master your_branch > your_branch.patch
$ git apply --check your_branch.patch
$ rm your_branch.patch
这样应该可以了。
如果你得到这样的错误
error: patch failed: test.txt:1
error: test.txt: patch does not apply
这意味着补丁并不成功,合并会产生冲突。没有输出意味着补丁是干净的,您可以轻松地合并分支
请注意,这实际上不会改变您的工作树(当然除了创建补丁文件,但您可以安全地删除之后)。在git-apply文档中:
--check
Instead of applying the patch, see if the patch is applicable to the
current working tree and/or the index file and detects errors. Turns
off "apply".
提醒那些比我更聪明/对git更有经验的人:如果我错了,请告诉我,这个方法确实显示出与常规合并不同的行为。奇怪的是,这个问题已经存在8年多了,没有人会提出这个看似显而易见的解决方案。
其他回答
为你的工作副本制作一个临时副本,然后合并,并将两者区分开来。
Git在合并时引入了——ff-only选项。
来自:http://git-scm.com/docs/git-merge ——ff-only 拒绝合并并以非零状态退出,除非当前HEAD已经是最新的,或者合并可以作为快进解决。
这样做将尝试合并和快进,如果不能,它将中止并提示您不能执行快进,但不影响您的工作分支。如果它可以快进,那么它将在工作分支上执行合并。此选项也可用于git拉取。因此,你可以这样做:
git pull --ff-only origin branchA #See if you can pull down and merge branchA
git merge --ff-only branchA branchB #See if you can merge branchA into branchB
我的简单粗暴解决方案是:
创建一个“pre-master”分支(当然来自master) 将所有你想要的东西合并到这个预master中。 然后你可以看到合并是如何发生的,而不触及主。 将pre-master合并为master OR 将所有想要发布的分支合并到master中
不管怎样,我会听从@orange80的建议。
这可能很有趣:从文档中:
如果您尝试合并,导致复杂的冲突,并希望 重新开始,你可以用git merge -abort恢复。
但你也可以用幼稚(但缓慢)的方式来做:
rm -Rf /tmp/repository
cp -r repository /tmp/
cd /tmp/repository
git merge ...
...if successful, do the real merge. :)
(注意:仅仅克隆到/tmp不能工作,你需要一个副本,以确保未提交的更改不会冲突)。
不完全是那样的。但是您可以使用——no-commit选项,这样它就不会在合并后自动提交结果。通过这种方式,您可以检查合并,如果需要的话,还可以在不破坏提交树的情况下撤消合并。