使用脚本检查git分支是否在另一个分支之前

时间:2018-07-23 09:27:39

标签: linux git scripting git-branch

我有branch1branch2,并且我想要某种:

git branch1 isahead branch2

这将显示branch1是否具有branch2不具有的提交(并可能也指定那些提交)。我无法检查差异原因branch2 是否在branch1之前(具有branch1没有的提交)。

有办法吗?我翻阅了git diff,却找不到任何东西

3 个答案:

答案 0 :(得分:3)

您可以使用

git log branch2..branch1

如果branch1branch2之前没有提交,则输出为空。

您也可以使用git rev-list --count branch2..branch1

这将显示前面的提交次数

Source

答案 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 ...