git diff 輸出的含義, 如何撤銷一個patch

記錄這篇是來源於我有一個項目,將代碼從倉庫拉下來後,需要修改一些配置才能夠運行。我不想每次都手動去修改那幾個需要自定義的配置文件,所以我做了一個patch。然後每次把代碼拉下來後,運行一下git apply set_config.patch,所有的配置就自動修改好了。
但是今天我apply這個patch的時候,我得到了一條錯誤信息:

$ git apply set_config.patch
error: patch failed: conf/file_a.conf:18
error: conf/file_a.conf: patch does not apply

這說明我的patch不能應用到當前代碼了。
於是我需要搞清楚爲什麼,然後再對patch做一些手動的修改,就能夠應用這個patch了。
於是我認真地學習了一下git diff輸出的含義。因爲我的patch文件是通過git diff > set_config.patch生成的。
我主要是不明白patch文件中@@ -83,7 +83,7 @@ class aaa(threading.Thread):這句話的含義,於是我查到了:

第二部分,變動的位置用兩個@作爲起首和結束。

@@ -1,7 +1,7 @@
前面的"-1,7"分成三個部分:減號表示第一個文件(即f1),"1"表示第1行,“7"表示連續7行。合在一起,就表示下面是第一個文件從第1行開始的連續7行。同樣的,”+1,7"表示變動後,成爲第二個文件從第1行開始的連續7行。

參考鏈接:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html

於是我根據上面的錯誤信息,定位到了file_a.conf文件。緊接着定位到了這樣一行:

diff --git a/conf/file_a.conf b/conf/file_a.conf
...
@@ -18,16 +18,16 @@ var_a = 1
var_NAME = a
一樣的行
+ ...
+ ...
- ...
- ...
- 一樣的行

我將這部分diff結果刪去,然後再運行git apply set_config.patch,成功。於是問題百分百出在了file_a.conf上。
然後我將patch文件中,從var_NAME = a開始的16行拷貝出來,然後和file_a.conf的從var_NAME = a開始的16行進行對比。發現最後的本該一樣的行,卻顯示不一樣。如下圖最後一行(圖中的變量名並不是好的例子,僅僅是爲了說明今天要說明的問題隨便取的,請勿模仿):
在這裏插入圖片描述
然後我將代碼中的不一樣的這行,改成一樣的,也就是將代碼裏的aaa = 2改成 aaa = 1,然後再運行git apply set_config.patch,成功。
原來這次錯誤的原因是,遠程倉庫的代碼對配置文件的默認值進行了更新。而我做這個patch文件的時候,這個值還未被更新。所以我需要更新一下我的patch,讓它能夠應用到新的代碼上:
於是在我應用了set_config.patch後,git diff一番查看,確認所有的代碼是我要自定義的修改。再次運行git diff > set_config.patch,更新了patch文件,我發現patch文件中的這行:
@@ -18,16 +18,16 @@ var_a = 1
變成了
@@ -18,19 +18,19 @@ var_a = 1

最後,如果需要撤回剛纔打上的那個Patch,使用命令:git apply -R set_config.patch

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