簡體   English   中英

實際上在GitHub上顯示的合並提交的區別是什么?

[英]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是第一個親本的所述第一個親本HEAD2bb48b5 )。 這可以通過重寫^<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM