• git --- 回滚 restore, reset, revert


    git revert

    • git revert 是用于“反做”某一个版本,以达到撤销该版本的修改的目的
    • 也就是git revert会生成一个新的commit, 而这个commit需要回滚的版本的内容是一样的
    • 如下, 比如版本三的commit有问题, 需要进行版本回退, 则执行 git revert 版本二 这个命令, git会生成版本四, 而版本四的内容和版本二是一样的
      在这里插入图片描述

    Example

    • 目前有一个greeting.txt文件, git 记录如图
      在这里插入图片描述
    • 使用revert 恢复到最近一个commit之前的样子(commit 0343dc3)
      在这里插入图片描述
    • 查看git 记录以及greeting.txt的内容
      在这里插入图片描述
    • 注意: 如果要恢复到几个版本以前的状态, 尽量一个一个恢复, 避免冲突
    • 比如要恢复到 fbc9245 之前的状态, 则先revert 020cf2e --> revert 0343dc3 --> reevrt 2d73d74 ----> revert fbc9245

    git restore

    • git restore有两种用法
    • 如果文件在工作区, 还没有被add进缓存区, 则git restore会直接丢弃目前工作区的更改
    • 如果文件在缓存区, 则需要使用 git restore --staged 将文件从缓存区移动回工作区

    Example

    git restore -- staged
    
    • 1
    • 现在有一个更改, 已经被加入进缓存区
    • 使用 git restore --staged bar.txt 将文件移出缓存区, 放进工作区

    在这里插入图片描述

    git restore
    
    • 1
    • 使用 git restore 将工作区的代码丢弃, 恢复原状
      在这里插入图片描述

    Example: 恢复被删除的文件
    在这里插入图片描述

    git reset

    git reset --soft

    • 仅仅移动当前 Head 指针,不会改变工作区和暂存区的内容
    • 之前commit的内容, 包括新增的文件,会被放进暂存区 (未commit)

    Example:

    • 现在工作区 有一个修改, 暂存区有一个修改
      在这里插入图片描述
    • git 记录如下
      在这里插入图片描述
    • 执行 git reset --soft HEAD~1 表示恢复到HEAD指针上一个版本
    • 暂存区和工作区的文件不会被改动, 仅仅是HEAD指针被移动了 而之前的commit (新加10.txt) 全部会被放进缓存区
      在这里插入图片描述
      在这里插入图片描述
    • 注意此时的commit 10不会被丢弃,依然存在
      在这里插入图片描述
    • 如果在工作区或者缓存区的文件就是上次修改的文件,则会合并内容
    • 10.txt 从modified变为 new file,但是内容没有被丢弃
      在这里插入图片描述
      在这里插入图片描述

    git reset --mixed

    • 移动当前 Head 指针
    • 之前commit的内容会被放进工作区
    • 目前缓存区的内容也会被放进工作区
    • 新增的文件会变为untracked状态(也就是放进工作区)

    Example

    • 下面是mixed reset之前的状态
      在这里插入图片描述
    • 执行 git reset --mixed HEAD~1
    • 原来在缓存区的 1.txt会被放进工作区,而原来的新文件10.txt会被变为untracked状态(放进工作区)
    • 之前的commit内容 新文件 9.txt 也被直接变为untracked状态 (放进工作区)

    在这里插入图片描述

    git reset – hard

    • 将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交,当前 HEAD 指针、工作区和暂存区内容全部改变
    • 原有文件内容的变更 :修改内容丢失(修改的代码不会变成未add的状态)
    • 目录结构的变更(增加或者删除文件):新增文件丢失、删除的文件相当于没删

    Example

    • 下面是hard reset之前的状态
      在这里插入图片描述
    • 执行 git reset --hard HEAD~1 之后,工作区和暂存区全部被清空,回到上一个commit
      在这里插入图片描述
    • 注意, commit 10不会被删除,依然存在
      在这里插入图片描述
  • 相关阅读:
    okhttp4.11源码分析
    论语第二篇-为政
    axios的安装使用
    JavaScript模块化:提高代码可维护性和可重用性的利器
    Python 图_系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径算法
    机器学习笔记1
    rocketMQ简单理解
    2022年笔试知识总结展望(前后端均有)
    鸿蒙入门05-真机运行“遥遥领先”
    工业设计里的四个细节你知道吗?
  • 原文地址:https://blog.csdn.net/weixin_38803409/article/details/132962409