git diff 输出含义
今天编译aosp
时,碰到个在MAC Catalina系统上存在的bug,艰难的翻遍内外网,只找到一个解决方案。那就是Google家的补丁,但是只给了一个补丁版本号,咱代码的源地址是国内的,也不好直接更新这个补丁。于是找了找该补丁版本更改,可以直接从网页上看到相关修改,只不过是以diff
的格式提供。
初一看,有点懵,所以,来温习一下diff输出含义吧。
先随便找个目录,创建git 仓库,同时创建一个文件a.txt,并提交到git仓库。相关命令如下:
# 初始化git仓库
git init
# 创建文件a.txt
echo "first line
> second line
> third line" > a.txt
#将文件添加、并提交到git仓库
git add a.txt
git commit -m "aaaa"
然后用文本工具打开,删除 a.txt中的第二行,也就是second line
,使a.txt文件中的数据从:
first line
second line
third line
变成了:
first line
third line
然后提交修改:
git add a.txt
git commit -m "删除了第二行"
查看上库记录:
git log
可以拿到a.txt的两个库版本:
commit 847252d037b3cf5a9cdf53a9939218464b2c7428 (HEAD -> master)
Author: kiven <[email protected]>
Date: Thu Mar 26 20:19:28 2020 +0800
删除了第二行
commit d3f0db61f4aedf2e843fca6e1a54143a567fddfe
Author: kiven <[email protected]>
Date: Thu Mar 26 20:15:12 2020 +0800
commit a.txt
来对两个版本的a.txt
git diff d3f0db61f4aedf2e843fca6e1a54143a567fddfe 847252d037b3cf5a9cdf53a9939218464b2c7428 -- a.txt
diff --git a/a.txt b/a.txt
index 20aeba2..7a2c14e 100644
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,2 @@
first line
-second line
third line
本文的重点就是翻译一下这一段了。
先说一下diff命令本身:
git diff commit-id commit-id -- filename
- 两个commit-id表示需要对比的两个提交版本。
- filename表示要对比的文件是那个。
index 20aeba2..7a2c14e 100644
前后两个hash值表示文件两个版本的哈希值 100644表示的是文件的类型、权限之类的,在这里我不想关心他。
--- a/a.txt
+++ b/a.txt
---
表示更改前的文件+++
表示更改后的文件
@@ -1,3 +1,2 @@
这部分输出,表达了两个部分的意思:
-1,3
:表示下面输出的内容是修改前文件从第1行开始的共3行内容+1,2
:表示下面输出的内容是修改后文件从第1航开始的共2行内容
first line
-second line
third line
这一段就是修改的内容本身了。
-second line
:这一行前面的一个-
符号,表示,改行是修改前文件的内容,在修改后的文件中是不包含的。也就是说,当前比较的两个版本的文件,前一个版本比后一个版本少了第二行,也就是第二行被删掉了。
如何确定那个版本是前,那个版本是后,完全看你diff命令的执行顺序。比如,如果我将本例的两个commit-id顺序换一下,得到的将是完全相反的结果:
git diff 847252d037b3cf5a9cdf53a9939218464b2c7428 d3f0db61f4aedf2e843fca6e1a54143a567fddfe -- a.txt
diff --git a/a.txt b/a.txt
index 7a2c14e..20aeba2 100644
--- a/a.txt
+++ b/a.txt
@@ -1,2 +1,3 @@
first line
+second line
third line
这表示,后一个版本比前一个版本多了第二行:second line
。
这种做法,在逻辑上是非常合理的。所以,你会了么?