對於我的研究,我只需要很少的數據,其中之一就是前一次提交的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