参考:
三、怎么用
要想用好 reset 命令,必须深入理解它的三个参数—
–soft,–mixed(默认),–hard
看图说话。
1、–soft 参数
git reset --soft
如上图,soft 参数是指将本地仓回滚到 Y 版本,但是暂存区和工作区保持不变。此时本地仓回滚到 Y 版本号 commit 完成的那一刻。
2、–mixed 参数
git reset --mixed 或者 git reset
这是默认参数。表示本地仓和暂存区,都回滚到 Y 版本号。工作区代码不受影响。
3、–hard 参数
本地仓、暂存区、工作区,三区都回滚。
切记!!!工作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了。
此时如何安全回滚,请参考我的上一篇文章的 git stash 命令。
[思来享趣:理解 Git 的这两件事情,就可以在 Git 里为所欲为 zhuanlan.zhihu.com[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BNZXaJHh-1624589275273)(https://zhuanlan.zhihu.com/p/346723062)]
四、使用场景
具体使用的时候,要分清的就是用哪个参数最合适,下面举几个例子。再次提醒,工作区有未提交的改动时,不要用–hard 参数。
1、如何撤销一次 push?
此时用–soft 参数比较合适,只回滚本地仓到上一个版本,然后通过 git push -f 命令,撤销上次的 push,最后更改好代码后重新 push。步骤如下—
依次为
git reset --soft HEAD~1 // 将本地仓回滚到上一个版本号
git push origin master -f // 通过-f命令,将回滚后的版本号强制推送上去,相当于撤销了最新的push
// 修改代码
// 修改好后,重新add,commit,push即可。
2、如何撤销一次 commit?
如果你要同时撤销暂存区的话,就用–mixed 参数,如果要撤销工作区的修改就用–hard 参数,否则用–soft 最安全。
git reset --hard HEAD~1 // 慎用--hard参数,除非你知道你自己在做什么
五、组合拳
聪明的你,一定想到了,想要利用好 git 强大的版本控制功能,要学会使用组合拳,如以下命令—
git stash // 暂存代码
git reset --参数 版本号
git push --force
等等
这就需要你多多练习了,不过好在 git 足够强大,只要你稍微注意一点,不会出现找不回代码的情况,因此可以放心大胆地随意尝试。