Git-是在B之前或之后提交a

Git-是在B之前或之后提交a,git,Git,我希望能够理解提交是在哪两个标签(代表我的应用程序版本的标签)之间进行的 是否有命令用于识别提交a是否是提交B树上较高的父级。关于标记 您至少可以知道您的提交是否在带有以下内容的标记之后完成: aTagName表示距离当前提交最近的标记。 如果您的提交超过了该标记,您将不仅得到它的名称,还将得到aTagName-n-gxxxx,其中n是在该标记之后提交到当前提交的次数,由SHA1xxx表示 您可以将它与git标记--contains(包含)结合起来,以获得包含提交的标记:最后一个标记应该是历史上

我希望能够理解提交是在哪两个标签(代表我的应用程序版本的标签)之间进行的

是否有命令用于识别提交a是否是提交B树上较高的父级。

关于标记 您至少可以知道您的提交是否在带有以下内容的标记之后完成:

aTagName
表示距离当前提交最近的标记。
如果您的提交超过了该标记,您将不仅得到它的名称,还将得到
aTagName-n-gxxxx
,其中
n
是在该标记之后提交到当前提交的次数,由SHA1
xxx
表示

您可以将它与git标记--contains(包含)结合起来,以获得包含提交的标记:最后一个标记应该是历史上仍然包含提交的最早的标记

关于承诺: 是否有一个命令用于识别提交a是否是提交B树上较高的父级

见“

git合并基——是祖先

快速显示的最简单方法是运行

$ git log --decorate --oneline A..B
然后看看哪个标签在历史记录中第一个出现

oneline
只是为了在有大量提交的情况下减少分页,
decoration
是为了显示标记)


请注意(请参见表单
r1..r2
)这是在内部运行
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的一个提交顺序选项。

假设A和B不是指同一个提交,
git merge base A B

如果结果是A的提交,那么A是B的祖先

如果结果是B的提交,那么B是A的祖先

如果结果既不是A也不是B,则A和B会发散。但他们至少有一个共同的祖先

如果结果为空,则A和B来自两个分支,它们没有共同的祖先

$ git log --decorate --oneline A..B
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
}