使用脚本检查 git 分支是否领先于另一个分支

Check if a git branch is ahead of another using a script

我有 branch1branch2,我想要一些:

git branch1 isahead branch2

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

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

您可以使用

git log branch2..branch1

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

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

这将显示未来的提交数量

Source

你已经有了答案。所以我再补充一点。

git cherry 命令可用于执行此操作。

git cherry branch1 branch2

这将列出 branch2 中但不在 branch1 中的提交。如果需要,您可以使用 -v 标志使其打印提交消息和哈希值。

git cherry -v branch1 branch2

https://git-scm.com/docs/git-cherry

希望对您有所帮助:)

在很多方面都很好,但是对于脚本来说,只要你的 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

1git merge-base --is-ancestor 是在 Git 版本 1.8.0 中引入的。一些系统仍在运送 Git 1.7...