我正在合并一个可能有很多冲突的远程分支机构。我怎么知道它是否会有冲突?
我没看到任何类似于,git合并的预演。
我正在合并一个可能有很多冲突的远程分支机构。我怎么知道它是否会有冲突?
我没看到任何类似于,git合并的预演。
当前回答
我使用request-pull git命令来做到这一点。它允许您查看合并时可能发生的每个更改,但无需对本地或远程存储库进行任何操作。
例如,假设您想将一个名为“feature-x”的分支合并到您的主分支中
git request-pull master origin feature-x
将向您展示将发生什么(不做任何事情)的摘要:
The following changes since commit fc01dde318:
Layout updates (2015-06-25 11:00:47 +0200)
are available in the git repository at:
http://fakeurl.com/myrepo.git/ feature-x
for you to fetch changes up to 841d3b41ad:
----------------------------------------------------------------
john (2):
Adding some layout
Refactoring
ioserver.js | 8 +++---
package.json | 7 +++++-
server.js | 4 +--
layout/ldkdsd.js | 277 +++++++++++++++++++++++++++++++++++++
4 files changed, 289 insertions(+), 7 deletions(-)
create mode 100644 layout/ldkdsd.js
如果您添加-pparameter,您还将获得完整的补丁文本,就像您对每个更改的文件执行git diff一样。
其他回答
作为对已有答案的总结,有两种方法来检查是否存在合并冲突
Git format-patch $(Git merge-base branch1 branch2).——| git apply——3way——check -
注意,在运行上述命令时,当前的分支应该是branch1
另一种方法:
git merge --no-commit branch2
# check the return code here
git merge --abort
我很惊讶没有人建议使用补丁。
假设你想测试从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 config --global alias.mergetest '!f(){ git merge --no-commit --no-ff "$1"; git merge --abort; echo "Merge aborted"; };f '
现在我只需调用
git mergetest <branchname>
看看是否有任何冲突。
我只想看到冲突(不能看到他们与diff3在GitHub,还)。充分利用上面的答案,我想到了这个:
git merge --no-commit --no-ff @{upstream}
git grep -l '<<<<<<< HEAD' | xargs -I % sh -c "echo -e '\n\e[93m%\n---\e[0m' && cat %"
git merge --abort
对我来说,这是用来检查我的pr的。你可以用任何分支替换@{upstream}。
我希望这对大家有所帮助。