我需要做一个git revert -m,但是我找不到任何有关提交父项编号的文档。我见过的所有内容(包括rev-parse的帮助页面)只是告诉我父母已经编号,但没有说明他们是如何编号的。有人能指出我在哪里定义以及如何确定这个?
答案 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
提供了所有不同语法的完整描述。