社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

理解Git Diff

N08 • 5 年前 • 1795 次点击  

我的报告中有一个文件“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
 
1795 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Amadan
Reply   •   1 楼
Amadan    6 年前

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    6 年前

您已经更改了第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    6 年前

在第1行,三行已被删除

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

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