我有branch1
和branch2
,并且我想要某种:
git branch1 isahead branch2
这将显示branch1
是否具有branch2
不具有的提交(并可能也指定那些提交)。我无法检查差异原因branch2
是否在branch1
之前(具有branch1没有的提交)。
有办法吗?我翻阅了git diff
,却找不到任何东西
答案 0 :(得分:3)
您可以使用
git log branch2..branch1
如果branch1
在branch2
之前没有提交,则输出为空。
您也可以使用git rev-list --count branch2..branch1
这将显示前面的提交次数
答案 1 :(得分:1)
您已经有了答案。因此,我将添加更多内容。
git cherry
命令可用于执行此操作。
git cherry branch1 branch2
这将列出branch2
中的提交,而不列出branch1
中的提交。如果需要,可以使用-v标志使它显示提交消息以及哈希。
git cherry -v branch1 branch2
https://git-scm.com/docs/git-cherry
希望它会有所帮助:)
答案 2 :(得分:1)
matthiasbe's answer可以用于多种用途,但是对于脚本编写,只要您的Git不太严格, 1 ,您通常希望使用:
if git merge-base --is-ancestor commit-specifier-1 commit-specifier-2; then
# commit specifier #1 is an ancestor of commit specifier 2
else
# commit specifier #1 is NOT an ancestor of commit specifier 2
fi
作为测试。这是因为git merge-base --is-ancestor
将结果编码为退出状态,因此您不必运行单独的测试即可将数字与某物进行比较。
请注意,一个分支提示可能既在之前又在之后在另一个:
$ git rev-list --left-right --count stash-exp...master
1 6473
在这里,都不是指定的提交是另一个的祖先。但是,考虑到这些其他说明符:
$ git rev-list --left-right --count master...origin/master
0 103
我们看到这里的master
严格位于origin/master
之后,因此:
$ git merge-base --is-ancestor master origin/master && echo can fast-forward
can fast-forward
这与从git rev-list --count origin/master..master
中看到零计数时得到的答案相同:
$ git rev-list --count origin/master..master
0
1 git merge-base --is-ancestor
在Git版本1.8.0中引入。某些系统仍在使用Git 1.7 ...