【问题标题】:How do I find out the numbering of merge commit parents?如何找出合并提交父母的编号?
【发布时间】:2011-11-04 21:09:37
【问题描述】:

我需要做一个 git revert -m ,但我找不到任何关于提交父母如何编号的文档。我所看到的一切(包括 rev-parse 的帮助页面)只是告诉我父母是编号的,但没有说明他们是如何编号的。有人可以向我指出这是在哪里定义的以及如何确定的吗?

【问题讨论】:

    标签: git merge


    【解决方案1】:
    git show --format="%P" <SHA>
    

    将按数字顺序为您提供给定提交的父 SHA。大多数情况下,您要为git revert 指定的地址是1

    在大多数合并的情况下,签出分支的 SHA 将是第一个父级,而合并到的分支的 SHA 将是第二个。 (基本上,签出的分支始终是第一个父级;其他父级是按其规范顺序指定给合并命令的分支。)

    如果要查找特定父级的 SHA,请使用插入符运算符:

    • 第一父母:git rev-parse &lt;SHA&gt;^1
    • 第二个父母:git rev-parse &lt;SHA&gt;^2

    等等。

    【讨论】:

    • 很好的答案,但危险在于“大多数”,而不是全部。我有一个从 svn 转换而来的 git repo,并且已经对其执行了几个 git-filter-branch 操作,现在看来,在某些情况下,顺序是相反的。见stackoverflow.com/questions/27704438/…
    【解决方案2】:

    在合并提交上执行 git log 或 git show 将在“Merge:”标题中显示合并的父级列表。这按从左到右的顺序列出了合并的父级。第一个是第一个父母,第二个是第二个父母,依此类推。

    例如在 git 仓库上:

    $ git show 0af53e188a3a8915f65c3b3edaeed3e07d8d3802
    commit 0af53e188a3a8915f65c3b3edaeed3e07d8d3802
    Merge: b81b758 8894d53
    Author: Junio C Hamano <gitster@pobox.com>
    Date:   Thu Aug 11 11:04:28 2011 -0700
    
        Merge branch 'cb/partial-commit-relative-pathspec'
    
        * cb/partial-commit-relative-pathspec:
          commit: allow partial commits with relative paths
    

    b81b758 是第一个父级,8894d53 是合并提交 0af53e1 的第二个父级。

    提交完成时,父提交根据它们在命令行上的出现顺序编号:

    [on branch master]
    $ git merge foo bar baz
    

    这会将分支 foo、bar 和 baz 合并到 master 中,如果无法进行快进,则会创建一个新的合并提交。

    在生成的合并提交中,“master”将是第一个父级,“foo”第二个,“bar”第三个,“baz”第四个。

    【讨论】:

      【解决方案3】:

      提交“编号”实际上是它的 SHA1 哈希值。这为验证目的提供了极大的完整性。

      它还有一个很好的副作用,即您不/不能期望它以任何方式是顺序的,这也是分支和合并多用户分布式 VCS 系统的自然属性。有很多 tree walk 命令和引用提交的方法,例如 HEAD^ 或 HEAD^^。

      git help revisons 给出了所有不同语法的完整描述。

      【讨论】:

      • 问题是关于父编号,而不是提交 ID。即“第一父母”“第二父母”(HEAD^1 vs HEAD^2
      • @ABMagil 最初的问题没有明确说明它是关于在 HEAD^^~~ 样式语法中进行计数,它只是谈到了提交编号,这通常是 sha1。最后我说 HEAD ^ 样式可用 - 我只是没有突出显示 git help revisons 作为来源。
      猜你喜欢
      • 1970-01-01
      • 2017-03-02
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 2015-02-26
      • 2011-09-05
      • 2012-02-21
      相关资源
      最近更新 更多