git CLI 语法来查找提交的右侧父级

  • 本文关键字:提交 CLI 语法 查找 git git
  • 更新时间 :
  • 英文 :


看起来 git 中的^~语法只会转到左父提交(右父级合并到的提交)。在我的特定情况下,我有一棵这样的树:

$ git log --pretty=format:"%h" --graph
*   f5712e3
|  
| * d0f8257
* | e1fe071
|/  
* e0fff07

我找到了git log HEAD^ -1git log HEAD~1 -1给我左父母e1fe071。获得正确父级的传统语法是什么?

$ git log HEAD^2

插入符号允许您在提交的直接父级之间进行选择,如git rev-parse文档中所述。

<rev>^例如HEAD^v1.5.1^0

修订参数^的后缀表示该提交对象的第一个父对象。 ^<n>表示第 n 个父项( <rev>^ 等同于 <rev>^1 )。作为特殊规则,<rev>^0 表示提交本身,当<rev>是引用提交对象的标记对象的对象名称时使用。

为了确定哪个是哪个,git show的输出*将按顺序列出父项。例如,libgit2 中主分支的头是一个合并提交,a3ef70b。

$ git 显示大师提交 a3ef70bb405a05c16fb533d828da2510ff751224合并: c4c47fc 8aba3d4作者: 爱德华汤姆森 <ethomson@edwardthomson.com>日期:2014 年 12 月 30 日星期二 11:53:55 -0600    来自libgit2/cmn/fetch-prune的合并拉取请求#2761    远程跟踪分支运行

请注意输出的第二行(以 Merge: 开头),它按顺序列出父项。我们可以使用git rev-parse验证此属性,如

$ git rev-parse master^1
c4c47fc2861935d8e373319c0734ea7b2ce34a73

$ git rev-parse master^2
8aba3d47cf96e24e02601175f900f0e851077c1a

检查来源确认。

strbuf_addstr(sb, "Merge:");
while (parent) {
    struct commit *p = parent->item;
    const char *hex = NULL;
    if (pp->abbrev)
        hex = find_unique_abbrev(p->object.sha1, pp->abbrev);
    if (!hex)
        hex = sha1_to_hex(p->object.sha1);
    parent = parent->next;
    strbuf_addf(sb, " %s", hex);
}

相关答案:在 git 中获取合并提交的父项

<小时 />

* git show的文档给出了关于提交谱系的警告:

如果提交是合并,并且漂亮的格式不是一行电子邮件原始,则会在 Author: 行之前插入一行。此行以"Merge:"开头,并打印祖先提交的sha1,用空格分隔。请注意,如果您限制了历史记录视图,则列出的提交可能不一定是直接父提交的列表:例如,如果您只对与某个目录或文件相关的更改感兴趣。

最新更新