美文网首页程序员工具箱
git 回退代码到指定commit,并新增一个包含回退代码记录的

git 回退代码到指定commit,并新增一个包含回退代码记录的

作者: 许一沐 | 来源:发表于2021-01-14 17:46 被阅读0次

    回退代码到指定commit,并新增一个包含回退代码记录的提交

    案例:新代码已经提交到了branchA,临时需要紧急修复线上bug,但branchA分支代码还不能发布。需要做一次回退,并保留记录方便后续操作。

    • 最新提交为 e1779c26e89231098a2e183e5795a4095ae22ac1

    • 需要将代码回退到 041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb

    • 并生成一条新的提交包含回退的内容

    操作步骤:

    git checkout 041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb # 回到历史提交:041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb
    git reset --mixed branchA # 把历史带到HEAD
    git checkout branchA # 签出HEAD
    git add . # 添加修改
    git commit # 把041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb和HEAD的 revert diff 提交
    git push origin branchA # 推送代码
    

    最终效果:

    • 新增一个提交:f108be2e84e198c235c87d3a652f1ce713040669,包含了回退的内容

    过程记叙

    • 回到历史提交 git checkout 041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb
    注意:正在切换到 '041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb'。
    
    您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以在切换
    回一个分支时,丢弃在此状态下所做的提交而不对分支造成影响。
    
    如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在 switch 命令
    中添加参数 -c 来实现(现在或稍后)。例如:
    
      git switch -c <新分支名>
    
    或者撤销此操作:
    
      git switch -
    
    通过将配置变量 advice.detachedHead 设置为 false 来关闭此建议
    
    HEAD 目前位于 041ee07df hackathon today 3 api develop
    
    • 把历史带到HEAD git reset --mixed branchA
    重置后取消暂存的变更:
    打印出变更文件列表
    
    • 签出HEAD git checkout branchA
    切换回目标分支, 通过 git status 可以看出文件差异列表
    
    • 操作代码提交
    git add . # 添加修改
    git commit -m 'revert 某版本' # 把041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb和HEAD的 revert diff 提交
    git push origin branchA # 推送代码
    
    • 查看结果 git log
    commit f108be2e84e198c235c87d3a652f1ce713040669 (HEAD -> branchA, origin/branchA)
    Author: echo <449211678@qq.com>
    Date:   Thu Jan 02 17:02:36 2021 +0800
    
        revert 某版本
    

    加塞做完如何恢复

    假设加塞完成后最新提交为 a29b52579fc417c2ac0f514c0f9d89f81b218392
    找到 上一次回滚前的id: e1779c26e89231098a2e183e5795a4095ae22ac1

    git checkout e1779c26e89231098a2e183e5795a4095ae22ac1 # 回到历史提交:e1779c26e89231098a2e183e5795a4095ae22ac1
    git reset --mixed branchA # 把历史带到HEAD
    git checkout branchA # 签出HEAD
    git add . # 添加修改
    git commit -m 'revert new code' # 把e1779c26e89231098a2e183e5795a4095ae22ac1和HEAD的 revert diff 提交
    git push origin branchA # 推送代码
    

    相关文章

      网友评论

        本文标题:git 回退代码到指定commit,并新增一个包含回退代码记录的

        本文链接:https://www.haomeiwen.com/subject/rfnvaktx.html