git CLI语法,用于查找提交的右侧父级

Ste*_*ven 2 git

似乎git 中的^~语法只进入左父提交(合并右父项的提交).在我的具体情况下,我有一个这样的树:

$ git log --pretty=format:"%h" --graph
*   f5712e3
|\  
| * d0f8257
* | e1fe071
|/  
* e0fff07
Run Code Online (Sandbox Code Playgroud)

我找到了两个git log HEAD^ -1git log HEAD~1 -1给了我左父e1fe071.获得正确的父母的常规语法是什么?

Gre*_*con 6

$ git log HEAD^2
Run Code Online (Sandbox Code Playgroud)

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

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

^revision参数的后缀表示该提交对象的第一个父级.^<n>Ñ个亲本(,<rev>^等效于<rev>^1).作为一项特殊规则,<rev>^0表示提交本身,并且在<rev>引用提交对象的标记对象的对象名称时使用.

要确定哪个是哪个,输出*git show,以列表的父母.例如,libgit2中 master分支的是一个合并提交,a3ef70b.

$ git show master
commit a3ef70bb405a05c16fb533d828da2510ff751224
Merge: c4c47fc 8aba3d4
Author: Edward Thomson <ethomson@edwardthomson.com>
Date:   Tue Dec 30 11:53:55 2014 -0600

    Merge pull request #2761 from libgit2/cmn/fetch-prune

    Remote-tracking branch prunning

注意第二行输出,开头Merge:,按顺序列出父项.我们可以通过验证该属性git rev-parse

$ git rev-parse master^1
c4c47fc2861935d8e373319c0734ea7b2ce34a73
Run Code Online (Sandbox Code Playgroud)

$ git rev-parse master^2
8aba3d47cf96e24e02601175f900f0e851077c1a
Run Code Online (Sandbox Code Playgroud)

检查来源确认.

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);
}
Run Code Online (Sandbox Code Playgroud)

相关回答: 在git中获取合并提交的父级


*文档git show提供了有关提交谱系的警告:

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