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
。
這種做法,在邏輯上是非常合理的。所以,你會了麼?