3 回答

TA貢獻1818條經驗 獲得超11個贊
由于我已經創建了這些圖像,我認為在另一個答案中使用它們可能是值得的,盡管..
(點 - 點)和...
(點 - 點 - 點)之間的差異的描述與manojlds的答案基本相同。
該命令git diff
通常只顯示提交圖中兩個點之間樹的狀態之間的差異。在..
和...
中符號git diff
的含義如下:
換句話說,git diff foo..bar
完全一樣git diff foo bar
; 兩者都將告訴你兩個分支的末端之間的差異foo
和bar
。另一方面,git diff foo...bar
將顯示兩個分支的“合并基礎”和尖端之間的區別bar
?!昂喜⒒A”通常是這兩個分支之間的最后一個共同提交,因此該命令將向您顯示您的工作bar
所引入的更改,同時忽略同時完成的所有操作foo
。
這就是你需要了解的所有內容..
和...
符號git diff
。然而...
...混亂的常見原因這里是..
和...
一個命令中使用時,如意味著微妙的不同的東西git log
期望一個組提交的一個或多個參數的。(這些命令最終都git rev-list
用于解析其參數中的提交列表。)
..
and和...
for 的含義git log
可以用圖形方式顯示如下:
因此,git rev-list foo..bar
向您顯示分支bar
上不存在的所有內容foo
。另一方面,git rev-list foo...bar
向您顯示所有提交foo
或 兩者中的提交bar
,但不是兩者。第三個圖表只顯示如果列出兩個分支,則會獲得其中一個或兩個分支的提交。
好吧,無論如何,我發現有點令人困惑,我認為提交圖表幫助:)
1我只說“通?!?,因為在解決合并沖突時,例如,git diff
會向您顯示三向合并。

TA貢獻1806條經驗 獲得超8個贊
git diff foo master
foo和master的top(head)提交之間的差異。
git diff foo..master
做同樣事情的另一種方式。
git diff foo...master
從git merge-base foo master
foo和master 的共同祖先()到master的tip。換句話說,僅顯示master分支自fob的共同祖先以來引入的更改。
GitHub的這個例子解釋了何時使用這兩個:
例如,如果您創建一個'dev'分支并向函數添加一個函數,那么返回到您的'master'分支并從README中刪除一行,然后運行如下所示的代碼:
$ git diff master dev它會告訴您從第一個文件添加了一個函數,并在README中添加了一行。為什么?因為在分支上,README仍然具有原始行,但是在'master'上你已經刪除它 - 所以直接比較快照看起來像'dev'添加它。
你真正想要比較的是你的分支分歧后'dev'的變化。要做到這一點,Git有一個很好的小速記:
$ git diff master...dev
- 3 回答
- 0 關注
- 1828 瀏覽
添加回答
舉報