2010-03-29 33 views

回答

13

我知道你已經看到了這一點,但這裏的是從文檔兩個片段:

git diff [--options] <commit>..<commit> [--] [<path>...]

這是同義以前的形式。 (git diff [--options] <commit> <commit> [--] [<path>...]

git diff [--options] <commit>...<commit> [--] [<path>...]

這種形式是,以查看在包含分支和向上改變到第二,起始於兩者的共同祖先。 git diff A...B相當於git diff $(git-merge-base A B) B

我可以看到這可能會混淆你 - .....符號爲git的差異並不意味着同樣的事情,因爲他們修訂列表(例如,用於git的日誌)做的。

因此,假設我們的歷史是這樣的:

A - B - C - D - E (master) 
     \ 
      F - G (lab) 

的第一個片段告訴我們,git diff master..lab相當於git diff master lab,換句話說git diff E G。這將告訴我們EG之間的直接差異 - 即我們將看到F,G的組合和DE的反向補丁的組合。

在另一方面,git diff master...lab相當於git diff C G - 它顯示了改變到第二提交(實驗室)來自兩個(主設備和實驗室合併的基礎上,這是C)的共同祖先開始。我們看到的差異將是FG組合。它不包括DE

的應用案例三重點符號是,當你想看到所有您在自己的特性分支(實驗室)來完成,這不是合併到主還沒有工作。你不在乎主人還做了什麼 - 你只關心你在主題分支上做的工作。

+1

精彩。很好地解釋。謝謝 – 2010-03-29 18:15:23