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

时间:2011-08-26 22:16:44

标签: git merge

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

3 个答案:

答案 0 :(得分:17)

git show --format="%P" <SHA>

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

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

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

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

等等。

答案 1 :(得分: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

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

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

[on branch master]
$ git merge foo bar baz

如果无法快进,那么将分支foo,bar和baz合并为master并创建新的合并提交。

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

答案 2 :(得分:-2)

提交'number'实际上是SHA1哈希值。这为验证目的提供了极好的完整性。

它还有一个很好的副作用,你没有/不能指望它以任何方式顺序,这也是分支和&amp ;;的自然属性。合并多用户分布式VCS系统。有许多树步行命令和引用提交的方法,例如HEAD ^或HEAD ^^。

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