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

ome*_*zig 4 linux git scripting git-branch

我有branch1并且branch2想要某种:

git branch1 isahead branch2

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

有办法吗?我看了一下git diff却找不到任何东西

tor*_*rek 7

matthiasbe 的答案对于很多用途来说都很好,但是对于脚本编写,只要你的 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
Run Code Online (Sandbox Code Playgroud)

作为测试。这是因为git merge-base --is-ancestor将结果编码为其退出状态,这样您就不必运行单独的测试来将数字与某些内容进行比较。

请注意,一个分支尖端可能位于另一分支尖端之前之后:

$ git rev-list --left-right --count stash-exp...master
1       6473
Run Code Online (Sandbox Code Playgroud)

在这里,两个指定的提交都不是另一个的祖先。然而,考虑到这些其他说明符:

$ git rev-list --left-right --count master...origin/master
0       103
Run Code Online (Sandbox Code Playgroud)

我们看到master这里严格落后origin/master于 ,因此:

$ git merge-base --is-ancestor master origin/master && echo can fast-forward
can fast-forward
Run Code Online (Sandbox Code Playgroud)

这与您从看到 0 计数中得到的答案相同git rev-list --count origin/master..master

$ git rev-list --count origin/master..master
0
Run Code Online (Sandbox Code Playgroud)

1git merge-base --is-ancestor在 Git 版本 1.8.0 中引入。某些系统仍在使用 Git 1.7...


mat*_*sbe 5

您可以使用

git log branch2..branch1

如果branch1前面没有提交branch2,则输出为空。

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

这将显示前面的提交次数

资源