2013-01-23 41 views
3

我是新來的版本控制的世界,並剛剛開始使用git。我有以下的輸出,當我運行命令git log爲什麼git diff會根據提交修訂版產生不同的結果?

commit 3b33318e20a64f4395bba416fe60f50f9e0002d1 
Author: pm 
Date: Thu Jan 24 08:42:24 2013 +1300 

    added fourth line to test1 

commit 37f2ce409cdc971958add1fcf6585064f5c0d61d 
Author: pm 
Date: Thu Jan 24 08:41:24 2013 +1300 

    first commit 

我明白git log顯示最新提交隨後一次提交。現在,如果我運行命令git diff HEAD HEAD~我的理解是「給我的最新提交和以前提交的差別」,我得到下面的輸出:

diff --git a/test1 b/test1 
index c6f02c2..e41a5e4 100644 
--- a/test1 
+++ b/test1 
@@ -1,4 +1,3 @@ 
This is a test document 
This is the second line in the document 
And the third 
-Added a fourth line 

這顯示了我添加的減號當我修改文件test1時出現一個新行然而,如果我運行命令git diff HEAD~ HEAD,我知道它是「顯示第二個最後提交和最新提交」之間的區別,它會顯示以下輸出:

diff --git a/test1 b/test1 
index e41a5e4..c6f02c2 100644 
--- a/test1 
+++ b/test1 
@@ -1,3 +1,4 @@ 
This is a test document 
This is the second line in the document 
And the third 
+Added a fourth line 

它顯示我添加了帶加號的第四行。

文件是如何比較的?我會想你的比較文件的方式是「比較最新的和以前的」git diff HEAD HEAD~

+4

邏輯上似乎'差異ab'≠'差異ba',所以我不明白你的問題... – CharlesB

+0

@CharlesB - 謝謝,但怎麼也比較一般做即先前的/新的或新的/以前? – PeanutsMonkey

回答

5

git diff A B列出了從A到B所需的更改。如果交換參數,則會得到相反的更改,如示例中所示。

你可能會爭辯Git可能知道A發生在B之前,然後產生相同的輸出git diff A Bgit diff B A。然而,恕我直言,這不是一個好主意,因爲兩個原因:

  1. 顯示從左到右得到的變化更一致。它也可以派上用場,特別是如果你在其上構建腳本的話。

  2. 有時並不清楚這是承諾在另一個之前,例如:

    C 
    /\ 
    A B 
    

    git diff A B:是A A前B或B之前?

+0

如何判斷哪個提交是A以及哪個提交是B? – PeanutsMonkey

+2

我不完全確定你的意思。你通常用'git log'查找ref,然後按照你感興趣的方向進行比較。例如,如果你想看看最後一次提交時發生了什麼變化,這將是'git diff head〜1 head'。所以它顯示了從現在到現在的一次提交所需的更改:-) – Christoph

+0

@Christoph - 謝謝。我指的是返回的行--- --- a/test1 +++ b/test1'。如何通過查看前一個提交的行以及哪個是最新的提交來判斷? – PeanutsMonkey

0

當把引用傳遞給git diff時,順序確實很重要。要查看差異在過去未來之路,你需要:

git diff HEAD~ HEAD 

Git不會爲你做任何猜測。

+0

當使用diff比較兩個文件時也是如此。 'diff A B'與'diff B A'相比,給出了不同的輸出,即完全相反。 – harpun

+0

@sciritai - 那麼這意味着將過去的提交與最新的提交進行比較是比較標準的,而不是比較最新的和過去的提交?那麼我如何從'--- a/test1 +++ b/test1'中看出哪個是前一個提交,哪個是最新的提交? – PeanutsMonkey

相關問題