解读git diff输出

7

我已经使用git很多年了,但从未使用过diff命令。今天开始我开始使用它,但是我真的不理解输出结果......我有一个文件,删除了第3行和第4行,得到了以下输出结果,请有人能帮助我用简单易懂的方式理解输出结果吗?谢谢。

$ git diff
diff --git a/README.txt b/README.txt
index 15827f4..8115e72 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,2 @@
 this file
 adding like
-line 3
-

1
http://www.git-tower.com/learn/ebook/command-line/advanced-topics/diffs - isherwood
非常有帮助的评论! - sherminator35
2个回答

12

第一行:生成差异的命令。

第二行:git 数据库信息对应了两个文件。

第三和第四行:--- 表示旧文件,+++ 表示新文件。

第五行:@@ 表示下一个 差异块 中表示的行范围。 -1,4 意味着从旧文件中的第 1 至第 4 行,而+1,2 意味着在新文件中的第 1 至第 2 行。

其余行是原始文件中的行,前缀为 (空格)、-+ 行存在于旧和新文件中,- 仅存在于旧文件中,+ 仅存在于新文件中。

这些符号被设计成助记符:- 表示“删除的行”, 表示“未更改的行”,+ 表示“添加的行”。


2
解释一下“旧文件”和“新文件”的含义会很有帮助。大多数示例甚至包括Git输出都使用这些“a/xxx”和“b/xxx”,如果您的Git命令是“git diff master origin/master”,那么这种方式可能会让人感到困惑,因为看不到任何“a或b”。 - nyholku
1
我不理解第二行的内容,即git数据库信息。 - thestarsatnight
1
@thestarsatnight Git根据每个文件的新状态创建文件或“blob”。更准确地说,当文件的内容在新状态下发生变化时,它会被暂存。 blob的名称是基于其内容的SHA-1哈希值。 例如,如果您键入git ls-files -s,您将看到您在暂存区中拥有的文件列表,您还可以看到SHA-1哈希值。 回到问题,15827f48115e72是此文件的blob的前7位数字。第一个是最后一次提交之前文件状态的blob。您可以使用git cat-file -p 15827f4查看blob的内容。了解有关Git对象的信息。 - undefined

0

这只是统一的差异格式。

这是产生此输出的命令行,只是为了检查是否有任何特殊标志:

diff --git a/README.txt b/README.txt

这是索引的哈希值和文件的Unix权限(0644

index 15827f4..8115e72 100644

这些行告诉您所看到的-+是指哪个文件:

--- a/README.txt
+++ b/README.txt

这里可能不是很有用,但如果你将diff应用于不同的文件名(仍然记得这是一般格式),它就会变得有用。

接下来是上下文,也就是diff所指的行数(对于文件-,从第1行到第4行;对于文件+,从第1行到第2行):

@@ -1,4 +1,2 @@

上下文可能还包括更改所在函数的名称,以便diff可以工作,即使您进一步修改了文件,只要可以定位应用更改的点。

最后,这是变更集:

 this file
 adding like
-line 3
-

这意味着你已经删除了这两行代码,因为它们在 -(旧文件)中,但在新文件中没有出现 + 行。


1
根据https://en.wikipedia.org/wiki/Diff#Unified_format,逗号后面的数字与列无关,而是表示受更改(删除或添加)影响的范围(行数)。 - Patrick Mevzek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接