使用背景
很多时候当我们使用git管理我们的代码仓库时,会错误的提交代码,这时候我们想要恢复到我们提交之前的样子,这就需要使用
git reset 和 git revert。
使用区别
git reset
大家都知道HEAD是指向当前分支的最新commit,而git reset 就是将HEAD指向你想要指向的位置,并且抛弃掉这之后的提交。
1.查看git提交记录
git log
2.回退到想要回退的conmmitId
git reset --hard commitId
3.用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧:
git push -f
commitId是你想要回退到的版本。
git reset有三种模式
--hard:恢复的最彻底,工作区,暂存区,仓库全部恢复;
--mixed:默认模式,暂存区,仓库恢复,只保留工作区;
--soft:最温柔,只恢复仓库,暂存区,仓库仍然保留;
如果不小心git reset --hard
不要慌
git reflog可以查看所有分支的所有操作记录(只要本地磁盘git记录没有被清除),而git log只是显示提交记录并不会看到git reset的结果。这时候就可以看到被git reset删除的commitId,从而通过git reset重新让head指向被删除的commitId。
git revert
相比较与git reset而言,git revert并不会撤销抛弃之前的commit,而是通过提交修改删除掉提交到错误代码。
1.查看git提交记录
git log
2.查找到要删除的commitId
git revert -n commitId
3.将修改加入到缓存区
git add .
4.提交
git commmit -m "message"
5.提交到远程仓库,因为是新的提交,所以不会出现本地HEAD指向旧于远程分支的HEAD指向
git push
参考文章: