2016-03-18 29 views
0

重新編寫此行爲只需初始化一個新的git存儲庫,創建一個文件,添加並提交。現在再次編輯這個文件(沒有添加,這次沒有提交)並存儲。結果應該是這樣的:git log -1 -p stash @ {0}顯示空的補丁

$ git log [email protected]{0} --graph --decorate 
* commit C (refs/stash) 
|\ Merge: A C 
| |  WIP on master: A init 
| | 
| * commit B 
|/  index on master: A init 
| 
* commit A (HEAD, master) 
     init 

A和C之間的差異顯示了預期的結果:

$ git diff [email protected]{0}^[email protected]{0} 
diff --git a/file b/file 
index b1b7161..51bdcb4 100644 
--- a/file 
+++ b/file 
@@ -1 +1,2 @@ 
+a new uncommited change 
init 

我希望爲命令

$ git log [email protected]{0} 

,但相同的輸出有沒有補丁。爲什麼會發生? (這與存儲無關:如果使用空commit,no-ff ...創建歷史記錄,則行爲相同)

回答

2

爲什麼會發生這種情況?

因爲git log -1 -p不顯示DIFF爲任何犯下多的父母。爲此需要其他選項。通常情況下,您可能想要選擇git show以顯示與補丁一起提交的一個單獨提交,該補丁大部分是等效的,但將--cc添加爲默認選項。明確添加,你也可以與git log進行比較。

有用於控制合併的顯示其他選項的提交:您可以使用-c獲得的--cc一個更詳細的形式,-m獲得常規DIFF所有家長(A和B),或結合起來,與--first-parent到得到從A到C的簡單差異。

+0

也許你誤會了我。儲藏前我沒有加入索引。因此B包含與A相同版本的文件,並且在存儲位於C之前工作樹會更改。如果區分A..B,則不會發生更改。如果您比較A..C,將顯示工作樹的更改(對於B..C,則相同)。雖然A是C的第一個父親,我會假設git log -1 -p應該顯示更改? – Henning

+0

@亨寧它不應該,但你是對的,我瘋狂,抱歉讓我自己的測試錯誤。我重寫了我的答案。 (通常完全重寫這樣的答案是不被接受的,因爲歪曲現有的投票是不公平的,但沒有人對此答案投票。) – hvd

+0

感謝您的詳細解釋!因此,讓git-log選擇與git-show相同的diff-options是不明智的。還是有反對意見? – Henning