![](/img/trans.png)
[英]What does git diff <commit> <commit> ... <commit> actually do?
[英]What is the diff of a merge commit actually showing on GitHub?
考慮以下提交頁面:
https://github.com/SignalR/SignalR/commit/cc5b002a5140e2d60184de42554a8737981c846c
通常,對於Git,提交是在先前代碼庫之上應用的一組更改,因此,請考慮以下樹:
查看1ca1b6b
的差異將在左邊顯示從ca2cac9
開始的代碼庫,在右邊的提交中應用的更改。 通過合並提交,我們在左側看到了什么? 即考慮以下樹:
如果我們在GitHub上查看commit 1e25f98
,那么左側是什么? 06f5be1
? 而對於一棵更復雜的樹呢? 還是三個分支之間的合並? 它只是顯示歷史上最后一個共同點之間的區別嗎?
實際上,Git提交是快照
...因此,您需要指定兩次提交以進行比較。 例如git diff HEAD^ HEAD
。 如果未指定,則第二個引用設置為HEAD。
但是可以,例如git log -p
顯示了有關第一個父級的補丁,使事情變得更容易。 GitHub / Lab的行為也一樣。
父母被命令
合並提交的第一個父級指向您在調用git merge
之前站立的提交。 (你的頭在哪里。)
默認情況下,始終采用第一個父母。 例如HEAD^
是的第一個親本HEAD
(第二圖像上6f01964
), HEAD~2
是第一個親本的所述第一個親本HEAD
( 2bb48b5
)。 這可以通過重寫^<number>
所以HEAD^2
是的第二個親本HEAD
,從而b0417C3
。
petrpulc的回答在本質上是正確的,我對此表示反對,但是要專門針對GitHub,GitHub表現出的差異就是完全忽略了第二個父級。
您可以使用以下命令在命令行上看到相同的差異:
git log -p --no-walk --first-parent -m cc5b002a5140e2d60184de42554a8737981c846c
或者,更簡單:
git show --first-parent cc5b002a5140e2d60184de42554a8737981c846c
(我們需要在git log
使用--no-walk
來防止Git查看更多的提交,而git show
則需--first-parent
。我們需要--first-parent
使Git僅查看第一個父對象,對於git log
,我們需要-m
或-c
或--cc
來強制git log
顯示補丁,因為-p
通常會跳過顯示要合並的補丁,即使我們使用--first-parent
來修剪剩余的父對象。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.