2017-03-01 54 views
-2

对于我的研究,我只需要很少的数据,其中之一就是前一次提交的SHA编号,即如果我给出特定的提交编号/ SHA编号,我应该能够在它之前获得SHA编号。如何获得之前提交的SHA编号?

帮我用git命令来得到相同的结果。

回答

2

git rev-list --parents -n 1 SOME_COMMIT将为您提供您指定的提交的SHA,其后跟随其父代的SHA。

+0

+1:这是让所有父母不用事先知道合并提交有多少父母的好方法。我更喜欢使用'--no-walk'而不是'-n 1',但效果完全相同。 – torek

2

git log --format="%H" -n 1 <commit>~仅输出散列(%H)并将输出限制为来自提交的父项(〜)的1项(而不是显示所有祖先)。

3

的命令翻译任何说明符转换为哈希ID是git rev-parse

语法,这意味着“寻父提交的承诺”为gitrevisions,并commit^commit~ - 使用你喜欢哪个输入。 commit部分几乎可以是任何有效的提交说明符,包括分支名称,另一提交哈希ID,特殊名称HEAD或这些后缀表达式中的另一个。

因此:

HEAD^ 

HEAD父,并且:

HEAD^^ 

HEAD^父,等等。

的波浪线语法实际上是许多帽子后缀的压缩版本,所以:

HEAD~5 

意味着同样的事情:

HEAD^^^^^ 

如果波浪号后面的数字丢失,Git的假设你的意思是1

这一切都说明,放在一起,就是:

git rev-parse HEAD^ 

(或HEAD~)将让你的实际哈希ID。但是你可以用任何正常的Git命令代替HEAD^HEAD~。同样,如果1234567是一个有效的缩短提交哈希ID,您可以编写1234567^1234567~1来引用其父提交。

(承诺是合并提交有两个或更多的父母,在这种情况下,有可同时提取每个家长一个,或指代所有的父母更多的语法。再次,看gitrevisions了解详情。)