2013-01-23 40 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

相关问题