• Git修复已发布版本的 Bug


    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 <joemale@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被成功修复,当前版本的进度丝毫不受影响~
  • 相关阅读:
    curl 的使用,参数大全
    ubuntu 编译安装php5扩展
    ubuntu 编译安装 php5.6.40
    ubuntu 编译安装 mysql5.7.32
    ubuntu 编译安装 apache2.4.46
    Android 逆向工具总结
    mariadb 和 mysql 之间的版本关系
    ubuntu 使用 apt 安装 apache2 php7 mysql8
    linux 系统安装 pip
    P2756 飞行员配对方案问题 提交 13.91k 通过 7.59k 时间限制 1.00s 内存限制 125.00MB 返回题目
  • 原文地址:https://www.cnblogs.com/qingfenglin/p/15829156.html
Copyright © 2020-2023  润新知