场景
在很多时候,我们想回滚代码,这个时候,我们想到了
git reset
的使用,但是回滚并不是想象中那么全能,能够让你滚来滚去。在你回滚前后,你都需要保持谨慎,别掉进一些大坑中
使用
首先,我们经常要回滚的场合应该是上一次,可以使用以下的命令既可。
git reset HEAD^
那么上上次,还有上上次呢?不错,直接多加上
^
号
git reset HEAD^^
// 回滚到上上次
git reset HEAD^^^
// 回滚到上上上次
当然也可以通过以下的形式:
git reset HEAD~1
git reset HEAD~2
git reset HEAD~3
这样跟上面的效果是一样的。
但是问题来了,我们现在在项目中发现一个严重的bug,但是这个是很久之前的了,中间我们提交了很多次,难道我们要去写好好个
^
么?或者要一个个的去数??
当然不需要,这个时候,我们可以通过commit_id去回滚,可以通过命令
git log
或者
git relog
查看各个提交的commit_id,找到我们想要回滚的位置的commit_id,复制。使用以下命令进行回滚。
git reset [commit_id]
如果我们不行回滚所有的文件,那么我们可以怎么做呢?很简单,就在上面的命令后面加上我们要回滚的文件所在路径既可。即:
git reset [commit_id] [file]
其实我们上面提到的只是
git reset
的三种形式之一(默认形式--mixed)
git reset的三种形式的区别
- --mixed.回退一个版本,而且会将暂存区的内容和本地已经提交的内容全部恢复到未暂存的状态。不影响原来的本地文件,未提交的也不会受到影响。这个就是它的好处,你可以不用先提交,再回滚。但是个人强烈建议你还是提交之后再去回滚。
- --sort.回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响)
- --hard.回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换,这里就是为什么建议你在回滚之前务必先提交自己的代码,这是非常有必要的(因为你如果使用--hard的话,同时你又没有提交的话,真的回不去了,别问我为什么知道)