Git - B之前或之后的提交A.

时间:2016-08-30 08:33:46

标签: git

我希望能够理解提交的2个标签(代表我的应用程序版本的标签)。

是否有一个命令可以判断提交A是否是提交B树上方的父级。

3 个答案:

答案 0 :(得分:1)

关于标签

您至少可以知道在带有git describe的标记后是否已完成提交:

 git describe --tags
 aTagName-n-gxxxx

aTagName表示距离当前提交最近的标记 如果您的提交超过了该标记,则您不会获得其名称,但是aTagName-n-gxxxxn是该标记之后提交到​​当前提交的数量,由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来自两个分支,它们没有共同的祖先。