使用脚本检查 git 分支是否领先于另一个分支
Check if a git branch is ahead of another using a script
我有 branch1
和 branch2
,我想要一些:
git branch1 isahead branch2
这将显示 branch1
是否有 branch2
没有的提交(也可能指定这些提交)。我无法检查差异原因 branch2
is 在 branch1
之前(有 branch1 没有的提交)。
有办法吗?我查看了 git diff
却找不到任何东西
您可以使用
git log branch2..branch1
如果 branch1
在 branch2
之前没有提交,输出将为空。
您也可以使用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...
我有 branch1
和 branch2
,我想要一些:
git branch1 isahead branch2
这将显示 branch1
是否有 branch2
没有的提交(也可能指定这些提交)。我无法检查差异原因 branch2
is 在 branch1
之前(有 branch1 没有的提交)。
有办法吗?我查看了 git diff
却找不到任何东西
您可以使用
git log branch2..branch1
如果 branch1
在 branch2
之前没有提交,输出将为空。
您也可以使用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
希望对您有所帮助:)
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...