我希望能够理解提交的2个标签(代表我的应用程序版本的标签)。
是否有一个命令可以判断提交A是否是提交B树上方的父级。
答案 0 :(得分:1)
您至少可以知道在带有git describe
的标记后是否已完成提交:
git describe --tags
aTagName-n-gxxxx
aTagName
表示距离当前提交最近的标记
如果您的提交超过了该标记,则您不会获得其名称,但是aTagName-n-gxxxx
,n
是该标记之后提交到当前提交的数量,由SHA1表示{ {1}}。
您可以将其与xxx
结合使用,以获取包含您的提交的标记:最后一个应该是历史记录仍然包含您的提交的最旧标记。
是否有一个命令可以判断提交A是否是提交B树上方的父级。
请参阅" How can I tell if one commit is an ancestor of another commit (or vice-versa)?"
git tag --contains <yourCommit>
答案 1 :(得分:0)
快速显示它的最简单方法是运行
$ git log --decorate --oneline A..B
并查看历史记录中首先显示哪个标记。
(oneline
只是为了在有大量提交的情况下减少分页,而decorate
则显示标记。)
请注意(请参阅r1..r2
表单上的Specifying Ranges)内部运行merge-base
,因此,如果您正在执行此操作,请直接运行merge-base
更好......但您需要检查返回值。你可以编写一个shell函数或脚本,并添加一个git别名来做得很好:
function ancestor()
{
if git merge-base --is-ancestor $1 $2; then
echo "$1 is ancestor of $2";
else
if git merge-base --is-ancestor $2 $1; then
echo "$2 is ancestor of $1";
else
echo "no parent-child relationship at all";
fi;
fi
}
这也会告诉你两个提交是否都是另一个的祖先。如果你想知道在那种情况下上面哪个,那么首先确定这意味着什么,然后选择一个提交排序选项到git-log。
答案 2 :(得分:0)
假设A和B不是指同一个提交,git merge-base A B
如果结果是A的提交,则A是B的祖先。
如果结果是B的提交,则B是A的祖先。
如果结果既不是A也不是B,则A和B分歧。但他们至少有一个共同的祖先。
如果结果为空,则A和B来自两个分支,它们没有共同的祖先。