git diff 保存成patch

有时候我们在本地修改了代码之后,无法发布到正式环境。所以我们需要想办法把修改过的地方保存下来,这样当需要展示修改后的代码时,我们可以复现,而不需要把所有代码都保存。

#第一步 : 将差异的地方保存到xxx.patch文件
git diff > xxx.patch

#当子模块也有差异需要保存的时候,使用
git diff --submodule=diff > xxx.patch

#第二步 : 在 .patch 文件的目录下将差异的地方复现
git apply /path/to/xxx.patch

#一般保险一些使用下面的三步走
#1.先检查patch文件
git apply --stat xxx.patch
#2.检查能否应用成功
git apply --check xxx.patch
#3.打补丁
git am --signoff < xxx.patch
  • 知道怎么查找关键的地方是否在git diff 里面
    直接搜索 "diff --git",编译器里直接搜索到有差异的地方

  • 知道怎么在git diff 选择性的保存差异点,而非所有的差异都保存
    先git diff 查看都有哪些,然后如果是有一些 "diff --git"的内容不希望加入到diff里面,因为太冗余,所以就git checkout 那个文件或者文件夹,这样再次git diff的时候就不会有了;但是git checkout之后,这个文件或者文件夹就会恢复原样

 

能检測出现的问题有下面几种样例:

1. error: cannot apply binary patch to 'xxx' without full index line

xxx通常会是bin/png/gif等等二进制文件 详细的原因就是patch中有指明要打上xxx文件,可是这个文件并不包括在这个patch中,不过有一个名字存在当中。遇到这个问题要重视。

2. error: core/java/android/provider/Settings.java: patch does not apply

出现这样的通常会是补丁冲突,这样的通常是强制打上补丁(使用--reject)后依据产生的*.rej文件来手动解决冲突。

3. warning: core/java/android/view/View.java has type 100644, expected 100755

出现这样的警告通常是文件内没有冲突,可是文件的权限发生变动。一般没有影响。

第二步强制打补丁

$ git apply --reject xxx.patch

运行了这一步后会产生什么样的结果,我对第一步的冲突来相应说明。

1.这样的问题通常是制作补丁的开发者没有将二进制文件制作到patch中云,对于这样的情况不会有不论什么的提示,由于patch中源资源文件都没有,Git也没有什么招术来解决。最好的方法是联系补丁提供者。

2.这样的情况是因为git apply是对照补丁中前后几行代码,假设没有出如今目标文件里,那么这就是冲突。这个是比較常常出现的,对于这样的情况会生成*.rej文件,能够find ./ -name *.rej找到这些冲突的补丁,手动打上就好。

3.能够考虑忽略。

git am -3 -k后假设有冲突,不要运行git checkout。假设不愿意改动冲突文件,佯装改动一下,加入进去才干进行下一步。
git --git-dir=../other_proj_dir/.git format-patch -k -1 --stdout xxxxxxxxxxxxxxxxxx | git am -3 -k
git am相同有--reject选项,加入这个选项能够将能打上的补丁先打上,冲突的文件生成*.rej文件。

参考链接:https://www.jianshu.com/p/a56671c9f450  

https://www.cnblogs.com/hrhguanli/p/4549006.html

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用git diff时,如果你只想保存部分差异而非所有的差异,可以按照以下步骤进行操作。首先,运行git diff命令来查看所有的差异点。你可以通过搜索"diff --git"来找到有差异的地方。接下来,如果你发现某些"diff --git"的内容太冗余,不希望加入到diff中,你可以使用git checkout命令来恢复该文件或文件夹的原样。这样,在再次运行git diff时,这个文件或文件夹就不会出现在差异中了。然而需要注意的是,通过git checkout恢复的文件或文件夹会回到之前的状态。所以,只有在你确保不需要保存这些差异的情况下,才应该使用git checkout命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [git diff 保存patch](https://blog.csdn.net/qq_36247447/article/details/116955445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Git Diff 保存代码差异及复现](https://blog.csdn.net/qq_38300692/article/details/125633685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值