2013-04-10 58 views
1

我已經拉和合並的代碼。兩個GIT歷史(或SHA哈希/提交)之間的實際差異

我想查看將應用於代碼的更改。

不幸的是,以下所有的還顯示被其他開發商進行(這些變化已經前段時間拉)的變化

 
git diff origin/ContactList...ContactList 
git diff origin/ContactList..ContactList 
git diff origin/ContactList...HEAD 
git diff origin/ContactList..HEAD 

換句話說,我已經克隆了回購。我在開發過程中拉了(我確實想要更新)。現在,我只想看到我的更改。

P.S:我沒有創造另一個分支

回答

3

git diff顯示你問它來顯示,這是兩次提交你給它的區別是什麼。

要了解如何查看「只有您自己的更改」,您必須瞭解上游更改進入合併歷史中的哪個位置。在以某種圖形表示方式查看歷史記錄時,可以輕鬆完成此操作。通過使用gitkgit log --graph --oneline --decorate或其他您喜歡的歷史瀏覽器。

假設你已經在發展的兩條平行線(你和上游)是合併一個「簡單」的情況下,你的歷史將是這個樣子:

... <- A <- B <- U1 <- U2 <- ... <- Un <-+- C <-- D <-- .... 
      ^       | 
      `--- Y1 <- Y2 <- ... <- Ym <-' 

在此表示,箭頭從去孩子向父母承諾,所以左側是較舊的承諾,而右側是較新的承諾。 (您的分支小費位於C的右側)。 U*提交代表上游更改,Y*提交您自己的提交,但這並不相關。

用於這些提交的名稱是符號;實際上在repo中調用diff時,您需要使用實際的ref名稱(標籤或分支,如果它們存在於正確的位置,或者否則執行SHA)。

要查看所發生的合併(該Y*提交)你自己的一部分所有累積的變化,你可以使用

git diff B Ym 

也就是說,合併基礎之間的差異(最後的共同承諾)和您最近提交合併前

你嘗試過包括實際合併提交的方式(C在這個例子中),其中已經包含了所有的上游更改,因爲該點的合併已經發生了(這實際上是一種合併的點提交)。

合併之前和合並之後某處的差異(包括合併提交)將包含合併兩側的所有更改。

+1

好答案!我還建議OP不要使用帶「git diff」的「..」和「...」sytnax:這些點已經被添加來使'git diff'的操作類似於'git log',但是這種相似性是誤導性的與後者相反,'git diff'總是隻對兩個版本進行操作,而不是對它們的範圍(這些點表示)。所以使用'git diff ONE TWO'總是更清晰。正如Nevik正確地指出的那樣,'git diff'只是在文本上比較兩個修訂版,因此不知道「我們」的更改。 – kostix 2013-04-10 15:32:57

+0

非常感謝你:) – 2013-04-14 17:29:38