git diff 输出的含义, 如何撤销一个patch - Go语言中文社区

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/njnujuly/article/details/90670066
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-30 15:40:03
  • 阅读 ( 1096 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢