常用常见的 - 重置到某个版本

  • 作者:KK

  • 发表日期:2019.09.21


这其实跟 线上回滚 一样也是用reset命令来实现的,线上回滚的本质也是将线上服务器的版本进行重置,只是我独立了一个专题来说,因为需求还是比较多的。

reset命令有3种使用方式,效果都不一样:

重置方式1:git reset 版本号

从常见的角度来说,恢复到指定版本,但在那个版本以后的文件修改会被保留,新添加的文件需要重新调用add命令来添加(用可视化工具如TortoiseGit的可以无视这一点);专业地说,它回退到指定版本后,只保留源码,而撤销掉commitindex信息。此为默认方式,等同于git reset --mixed 版本号

重置方式2:git reset --soft 版本号

从常见的角度来说,恢复到指定版本,但在那个版本以后的文件修改会被保留,而新添加的文件也不需要重新调用add命令来添加。专业地说,回退到某个版本,但只撤回了commit的信息。

重置方式3:git reset --hard 版本号

彻底回退到某个版本,那个版本的本地服务端存的是多少个文件,什么内容,都一模一样,在那个版本以后多出的文件一个都没有了,消失的文件也一个都没有了。除非你该目录下的文件从来没有add进去过。

  • hard 的干货说明

    这里需要细讲一下,比如你 版本A 到 版本B 改了 文件X 以及新增了 文件Y,reset --hard 版本A之后,不仅 文件X 的修改被还原,新增的 文件Y 也会消失,因为 版本A 的情况下 文件Y 是不存在的,就是这样彻底的还原。

    然而如果说还有个 文件Z 从来一直放在项目目录下而在 版本A 和 版本B 都没有被添加进项目里,那从 版本B 还原到 版本A 的时候,文件Y 不会受到任何影响,它依然会在项目目录下,因为它只是一个“嘉宾”角色,没有正式加入过这个仓库,不是它们的一员,不受reset命令的影响。即使 版本A 甚至 版本A 之前就已经在.gitignore里添加了 文件Y 也一样,只要 文件Y 没加入过仓库就不受任何影响。