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

這種做法,在邏輯上是非常合理的。所以,你會了麼?

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