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