常用常见的 - 重置到某个版本 ¶
作者:KK
发表日期:2019.09.21
这其实跟 线上回滚 一样也是用reset
命令来实现的,线上回滚的本质也是将线上服务器的版本进行重置,只是我独立了一个专题来说,因为需求还是比较多的。
reset
命令有3种使用方式,效果都不一样:
重置方式1:git reset 版本号
¶
从常见的角度来说,恢复到指定版本,但在那个版本以后的文件修改会被保留,新添加的文件需要重新调用add
命令来添加(用可视化工具如TortoiseGit
的可以无视这一点);专业地说,它回退到指定版本后,只保留源码,而撤销掉commit
和index
信息。此为默认方式,等同于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 没加入过仓库就不受任何影响。