Py学习  »  Git

理解Git Diff

N08 • 4 年前 • 966 次点击  

我的报告中有一个文件“file.txt”,其中包含三行:

1
2
3

此文件已提交。但是,如果我现在向文件中添加第四行,则如下所示:

1
2
3
4

当我输入“git diff file.txt”时,它会给出以下输出:

diff --git a/file.txt b/file.txt
index 5f5fbe7..b178657 100644
--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,4 @@
 1
 2
-3
\ No newline at end of file
+3
+4
\ No newline at end of file

换句话说,在第1行,根据git diff,删除了三行,添加了4行。( @@ -1,3 +1,4 @@ )这对我来说没有意义,因为我所做的只是添加第四行-所以我希望输出( -0,0 +4,1 )

这里发生了什么?


我在Windows7上运行Git。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38741
 
966 次点击  
文章 [ 3 ]  |  最新文章 4 年前
Amadan
Reply   •   1 楼
Amadan    5 年前

Unix将一行定义为“以行结束符结尾的字符串”。因此,几乎所有基于Unix的编辑器都有这样的行:

1\n
2\n
3\n

在哪里? \n 表示lf字符,表示行尾。如果您在这里添加第四行,它实际上只是一个新行。

Windows不共享此定义,许多基于Windows的编辑器考虑CR+LF组合(如下所示 \r\n )作为线条 分离器 ,不是线条 终结者 . AS git 注意到“文件末尾没有换行符”,您的文件是

1\r\n
2\r\n
3

当你添加另一行时,你

1\r\n
2\r\n
3\r\n
4

所以从 吉特 以Unix为中心的观点,您通过附加 \rn 对它。

现在去误会一下 diff 输出格式:默认为, 微分 正在为您提供“统一”格式,并在更改周围提供一些上下文。这些变化只是 + - 前缀:删除了原来的第3行,插入了新的第3行和第4行。符号 @@ -1,3 +1,4 @@ 下面的代码片段描述了旧文件的第1-3行和新文件的第1-4行。通常,统一的diff输出默认也会在每次更改前后为您提供两行上下文,以帮助人类准确理解更改的内容。( -U2 )如果不需要上下文,可以使用 -U0 .

tymtam
Reply   •   2 楼
tymtam    5 年前

您已经更改了第3行并添加了第4行。

第3行的变化是新的一行。

git diff --unified=0 可能更有意义(这只显示更改的行)。

diff --git a/a.txt b/a.txt index 5f5fbe7..b178657 100644 --- a/a.txt +++ b/a.txt @@ -3 +3,2 @@ -3 \ No newline at end of file +3 +4 \ No newline at end of file

它的颜色最好看:

enter image description here

Richard
Reply   •   3 楼
Richard    5 年前

在第1行,三行已被删除

不,第1行和第2行尚未更改。diff显示一些上下文,在更改前后显示几行,以便于理解。

差异显示删除了第3行,添加了第3行和第4行。第3行发生了变化,因为它之前没有行尾,但之后有行尾(因此差异显示“第1行删除了三行”)。