问题描述
在日常维护系统的过程中,我们经常需要修复他人提交的 Bug(因为自己写的都是 feature 嘛)。对于单个线上版本的项目,我们可以轻松地创建一个 bug 修复分支,修复完成后再将其合并到主分支即可。
然而,当系统同时存在多个线上版本时,比如 V1.0.1
、V1.0.2
、V1.0.3
、V1.1.0
等,或者需要针对特定版本进行定制开发时,按照原有的分支策略将导致分支数量激增,管理繁琐。
解决方案
经过深入了解问题后,我们发现需要一个更加优雅的方案来处理 bug 修复后的源代码归档工作。
我们提出了一个方案:将变更后的文件打包,并在需要时替换代码仓库中的文件。这样既保存了新文件,又避免了分支的创建。然而,该方案存在两个缺陷:
- 文件体积过大:无论修改了多少内容,都需要保存整个文件。
- 变更记录不清晰:没有记录具体进行了哪些修改,想要了解变更的内容需要与原文件进行对比。
针对上述缺陷,Git 提供了一个完美的解决方案:
我们可以使用以下命令将暂存区中的变更输出到文件中:
git diff > [patchfile]
通过这个命令,我们可以将变更内容保存到文件中。
但如何将这个文件应用到当前的代码中呢?这就需要使用下面的命令:
git am < [patchfile]
通过这条命令,我们可以将之前保存的差异应用到本地代码,实现了 bug 修复后的源代码还原。
IDEA 图形化操作
虽然前面介绍了如何通过命令行完成该操作,但现在我们通常使用 IDEA 进行开发,可以通过图形化界面完成 patch 的创建。
创建patch
- 打开commit,右键点击任一文件,然后选择
Create Patch from Local Changes...
- 选择需要包含的文件,填写相关信息(这里的信息就是文件名),点击
Create Patch...
创建patch文件
- 确定保存位置,点击ok即可保存
应用patch
-
点击
Git
-Patch
-Apply Patch
-
选择要应用的patch文件
-
选择需要还原的文件,点击
OK
即可完成