Git-修复已发布版本的 Bug

1. Git - 修复已发布版本的 Bug
有时候在项目进行了一段时间、发布了几个版本(Release)后,突然发现先前的某个年代久远的 Release 存在 Bug 需要修复。如何做到仅仅修改那个出 Bug 的 Release 的代码,而不影响其之后的所有的 Release 以及当前的进度?

解决步骤

假设项目目前最新的 Release 版本是 v0.4.2,正在进行 v0.5.0 的开发,而出 Bug 的版本是 v0.1.1。
回退到出 Bug 的版本
方法1:
首先,查看v0.1.1版本的详细信息:
git show v0.1.1
得到以下输出:
commit a83516d0fb5da5fd5ad749733a160219b5a5ceac (tag: v0.1.1)
Author: Alfred Liu <xx@163.com>
其中a83516d0fb5da5fd5ad749733a160219b5a5ceac就是版本发布时的 Commit ID。回退到v0.1.1:
git reset --hard a83516d0fb5da5fd5ad749733a160219b5a5ceac
此时查看目录,会发现所有源代码都已经回退到了当时的版本。
新建 fixbug分支
git checkout -b fixbug
建好bugfix分枝后,需要将原来的分枝(我这里是master分枝)前进到最新版本(否则它就一直停留在v0.1.1了)。
切换到 master 分枝
git checkout master
查看最新版本对应的 Commit ID
git reflog
前进到最新版本
git reset --hard 1523898
此时你会发现,master分枝为当前最新进度,fixbug分枝为出 Bug 的版本。
方法2:
git checkout -b 新分支名称 版本号(v0.1.1)

修改 Bug

接下来就是切换到 fixbug 分支:
git checkout fixbug

修改完 Bug 后,正常git add&git commit即可,并将fixbug分枝推送到远程 GitHub:

git add <file>

git commit -m "Fix bugs

git push origin fixbug

重打 Tag

将改好 Bug 的代码重新打上v0.1.1的 tag。这里需要注意的是,默认情况下 git 会给v0.1.1附上一个当前的时间戳,从而会出现v0.1.1的发布时间比v0.4.2晚的情况,GitHub 的 Release 页面则会认为v0.1.1是最新的版本。

因此我们需要自行“伪造”一个提交日期,即为原先v0.1.1的提交日期即可:

GIT_COMMITTER_DATE="2017-10-14 23:27" git tag -f v0.1.1 -m "The V0.1.1 Release"

将修改后的 tag 推送到远程 GitHub(强制更新):

git push -f origin --tags

Merge

最后需要将fixbug分枝归并到master分枝:

git checkout master

git merge bugfix --allow-unrelated-histories

此时肯定会有很多冲突出现,打开某个有冲突的文件,可以看到类似情况:

<<<<<<< HEAD

code in master branch

=======

code in fixbug branch

>>>>>>> fixbug

<<<<<<< HEAD 与 ======= 之间是当前分支的代码,======= 与 >>>>>>> fixbug 之间是待合并分枝的代码。按照实
际需求修改即可,最后一定要删除这些标记。

修改完成后正常 git add & git commit 即可。

清理

后续的一些清理工作即删除临时的fixbug分支:

删除本地 fixbug 分支

git branch -d fixbug

删除远程 fixbug 分支

git push --delete origin fixbug

老版本的Bug被成功修复,当前版本的进度丝毫不受影响`

posted @ 2022-06-19 16:06  Xingtxx  阅读(370)  评论(0编辑  收藏  举报