git diff 输出含义

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

这种做法,在逻辑上是非常合理的。所以,你会了么?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章