有两种方式来使用
git reset
git reset HEAD~yourNumber
传入基于当前HEAD要回退的版本次数git reset yourCommitId
传入要回退到的指定版本号
git reset
有三种模式
- 默认
mixed
模式,这种模式下回退之后,工作区还保持不变,缓存区没有内容,提交区指向了你要回退到的地方。也就是说,确实回退了,但是内容是现在版本的内容,你可以自己丢弃,丢弃之后就和你要去的那个版本一模一样了。 hard
模式,这个模式下,你回退之后就会到你回退的那个版本。工作区是那个版本的信息,缓存区没有内容,提交区指向你要回退的地方。总之就是和你要回退的那个地方的装填一模一样。这个一般用的多一点,就像直接回去。soft
模式,这个模式下,工作区还是保持不变,缓存区里把领先版本的内容变化都缓存好了,提交区指向要提交的地方
上面所有的
reset
操作,都会让前置的提交空置。
同时,git log
中的相关记录会发生变化。这样其实可以让commit
的次数减少。
不过对于公共库的reset
操作应该谨慎,具体以后再讨论。
在reset
之后,想要在看到以前的记录可以用git reflog
当
checkout
到不同的分支的时候,同时不同分支的HEAD
指向的是不同的commitid
的时候,如果工作区或者缓存区有修改,git
都会提示让你清理掉这些,才能让你提交。
也可以用
checkout
来做一个分支上的版本回退。不过好像不推荐这么做
git checkout HEAD~2
,这种命令可以回退到当前分支的前两个版本,不过一般不这么做。
git revert
命令可以用创建一次新提交的方式去还原以前的版本
git revert yourCommitId
这种方式还原,一般是用于线上项目的,自己维护的没有提交的使用reset
。这样是为了避免不必要的麻烦。还有一个问题就是既然是用revert
还原,冲突几乎是必然的,要手动删掉,然后创建一次新提交。