2013-04-03 44 views
0

有兩個提交SHA1,我怎麼得到哪個先去了手動分析git日誌?如何找出哪個提交先行?

請注意,我沒有試圖找出哪一個是另一個的祖先,我想知道哪一個先被推。

我想通過它在git歷史中的時間順序來獲取它,而不是通過提交日期。任何方法都是受歡迎的,但首選的是直接的方式(我直接在終端仿真器上使用它,而不是腳本)。


我嘗試使用git merge-base作爲@wRAR建議。

首先,有一個缺點:git merge-base --is-ancestor不給我輸出。它以0或1退出,而不輸出任何內容到標準輸出。它可以當腳本,但當手動直接在我的終端上使用它,我必須在一個額外的步驟後檢查退出狀態(echo $?在bash上,$LASTEXITCODE在PowerShell上)。不是一個交易破壞者,但會產生一點麻煩。

但是,無論如何,它沒有工作。

工程在以下情形:

> git log --oneline --graph 
| * <SHA1 D> Fourth commit. 
| * <SHA1 C> Third commit. 
| * <SHA1 B> Second commit. 
| * <SHA1 A> First commit. 
> git merge-base --is-ancestor <SHA1 B> <SHA1 C> 
> echo $? 
0 
> git merge-base --is-ancestor <SHA1 C> <SHA1 B> 
> echo $? 
1 

但不是在這一個(沒有做什麼,我打算):

> git log --oneline --graph 
* <SHA1 D> Merged work. 
|\ 
| * <SHA1 C> Paul's first commit. 
* | <SHA1 B> John's second commit. 
|/ 
* <SHA1 A> John's first commit. 
> git merge-base --is-ancestor <SHA1 B> <SHA1 C> 
> echo $? 
1 
> git merge-base --is-ancestor <SHA1 C> <SHA1 B> 
1 
+0

它按預期工作:任何提交都不是另一個的祖先。 – wRAR 2013-04-04 15:34:09

+0

如果您想使用除自然提交DAG之外的其他內容來建立提交順序,請澄清一下。 – wRAR 2013-04-04 15:37:33

+0

@wRAR添加了一個說明,說明我的意圖。 – talles 2013-04-04 15:50:40

回答

0

你需要比較兩個提交的提交日期。可以在git show(或任何其他合適的命令)中使用--format=fuller或使用包括提交日期字段的自定義格式。

0

唯一的訂單git知道的是由祖先關係給出的。提交時間等依賴於提交完成的機器的時鐘(可能與月亮一起),可能是一次提交的原始提交時刻,自從修改/編輯多次以來,甚至可能完全是假的。