2017-07-31 95 views

回答

1

簡單的答案是它是一個錯誤。

通過使用git rev-parse可以看到git diff有效看到的內容。下面是適用於普通的^!後綴提交:

$ git rev-parse 699d47e1d^! 
699d47e1d2777ad1c2a867671e35daa821769f29 
^4aaf5b0b21ac1fc294066593ac5243b3eaff897b 

,並在這裏將它應用到一個合併提交:

$ git rev-parse 117ddefdb^! 
117ddefdb4dfd9b40ae60967a7327754d8ce7a87 
^5e5a7cd9327cdbe6b50b5a0ead9b2ee5fb30789c 
^699d47e1d2777ad1c2a867671e35daa821769f29 

當您提供壓縮的符號來git diff,Git會使其通過相同的擴張代碼git rev-parse使用。然而,git diff不是將其打印出來,而是試圖回溯解釋結果。如果有兩個提交散列(具有各種標誌),它將在兩個命名的提交之間運行差異。如果有三個或更多,它會做一些不同的事情。

相關(但不完全相同):What is the difference between `git diff topic1 topic2 ^master` and `git diff topic1..topic2 ^master`?

+0

有沒有解決的eta?只是好奇。 – hIpPy

+0

我不認爲任何人都在意足以使這項工作。在另一方面,他們可能會認爲這是一個特點:如果他們把我的修爲其他問題,你風與合併差異,你用'混帳show'得到相同的一個。 – torek

+0

老實說,我認爲'commit ^!'是完美的,至少可以從文檔中區分出合併。 'commit〜commit'用於提交和合並,但我覺得合併的直觀性較差。 – hIpPy