对于我的研究,我只需要很少的数据,其中之一就是前一次提交的SHA编号,即如果我给出特定的提交编号/ SHA编号,我应该能够在它之前获得SHA编号。如何获得之前提交的SHA编号?
帮我用git命令来得到相同的结果。
对于我的研究,我只需要很少的数据,其中之一就是前一次提交的SHA编号,即如果我给出特定的提交编号/ SHA编号,我应该能够在它之前获得SHA编号。如何获得之前提交的SHA编号?
帮我用git命令来得到相同的结果。
git rev-list --parents -n 1 SOME_COMMIT
将为您提供您指定的提交的SHA,其后跟随其父代的SHA。
git log --format="%H" -n 1 <commit>~
仅输出散列(%H)并将输出限制为来自提交的父项(〜)的1项(而不是显示所有祖先)。
的命令翻译任何说明符转换为哈希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了解详情。)
+1:这是让所有父母不用事先知道合并提交有多少父母的好方法。我更喜欢使用'--no-walk'而不是'-n 1',但效果完全相同。 – torek