如何找出合并提交父项的编号?

Rya*_*yan 16 git merge

我需要做一个git revert -m,但我找不到任何有关提交父项编号的文档.我见过的所有内容(包括rev-parse的帮助页面)只是告诉我父母已经编号,但没有说明他们是如何编号的.有人能指出我在哪里定义以及如何确定这个?

Amb*_*ber 17

git show --format="%P" <SHA>
Run Code Online (Sandbox Code Playgroud)

将按数字顺序为您提供给定提交的父SHA.通常,您要指定的那个git revert将是1.

在大多数合并的情况下,已检出的分支的SHA将是第一个父,并且合并的分支的SHA将是第二个.(基本上,签出的分支始终是第一个父级;其他父级是按照规范的顺序为merge命令指定的分支.)

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

  • 第一位家长: git rev-parse <SHA>^1
  • 第二个父母: git rev-parse <SHA>^2

等等.


hol*_*eek 5

在合并提交上执行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
Run Code Online (Sandbox Code Playgroud)

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

提交完成后,父提交将根据命令行上的出现顺序进行编号:

[on branch master]
$ git merge foo bar baz
Run Code Online (Sandbox Code Playgroud)

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

在生成的合并提交中,"master"将是第一个父级,"foo"第二个,"bar"第3个,"baz"第4个.