我的仓库中有一个文件“ 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
换句话说,根据git diff(@@ -1,3 +1,4 @@
),在第一行删除了三行,并添加了四行。这对我来说没有意义,因为我所做的只是添加第四行-所以我希望输出(-0,0 +4,1
)
这是怎么回事?
我正在Windows 7上运行git。
答案 0 :(得分:1)
第1行的三行已被删除
否,第1行和第2行没有更改。 Diff会显示一些上下文,以及更改前后的几行内容,以便于理解。
差异显示第3行已删除,第3行和第4行已添加。第3行发生了变化,因为它之前没有行尾,但是之后没有(因此diff显示“第1行的三行已被删除”)。
答案 1 :(得分:0)
您已更改了第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
最好以彩色显示:
答案 2 :(得分:0)
UNIX将行定义为“以行终止符结尾的字符串”。因此,几乎所有基于UNIX的编辑器都具有以下代码行:
1\n
2\n
3\n
其中\n
代表LF字符,表示一行的结尾。如果您要在此处添加第四行,则实际上只是一个新行。
Windows不共享此定义,许多基于Windows的编辑器将CR + LF组合(以下记为\r\n
)视为行分隔符,而不是行 terminator < / em>。正如git
用“ \文件末尾没有换行符”指出的那样,您的文件是
1\r\n
2\r\n
3
添加另一行后,您得到了
1\r\n
2\r\n
3\r\n
4
因此,从git
的以UNIX为中心的角度来看,您确实通过在行3上附加了\r\n
来修改了行3。
由于对diff
输出格式存在误解:默认情况下,diff
为您提供了“统一”格式,并带有有关更改的上下文。所做的更改只是以+
或-
为前缀的行:原始的第3行已被删除,新的第3行和第4行被插入。符号@@ -1,3 +1,4 @@
表示,下面的代码段描述了旧文件的1-3行和新文件的1-4行。通常,统一的diff输出默认会在每次更改前后为您提供两行上下文,以帮助人们准确了解更改的内容(-U2
)。如果您不想使用上下文,则可以使用-U0
将其关闭。