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
1git merge-base --is-ancestor 在 Git 版本 1.8.0 中引入。一些系统仍在使用 Git 1.7...