坑系列 (git ) -> git 拉错分支或 commit / push 之后的撤销操作
由于本人时常粗心大意,多次拉错分支,甚至有时候push完了,才发现分支拉错了,总结了网上的一些解决办法,和自己在应用这些办法时,又遇到的问题,欢迎参与讨论 :)
1. 第一种情况:只是commit ,还没有push -> 这些改变还在暂存区没有到远程仓库
解决办法:
-
- 找到上次提交的commit_id -> 运行 git reflog
- 执行撤销 -> 运行 git reset --hard commit_id 或者
git reset --hard HEAD@{n},(n是你要回退到的引用位置)
附:
1.这里的commit_id 类似于黄字,相应的HEAD@{n}也可以找到

2.--hard/ --mixed/--soft
–mixed 修改本地仓库、暂存区里面的数据为commitId对应快照里的数据,是git reset默认的参数,–mixed可缺省。 暂存区的数据会被快照中的数据覆盖;
self: 只改变仓库和暂存区,工作区不改变
–soft 修改本地仓库里面的数据为commitId对应快照的数据。(仅改变指向快照的指针指向);
self: 只改变仓库,工作区和暂存区不改变
–hard 修改本地仓库、暂存区、工作区里面的数据为commitId对应快照的内数据;
self: 仓库、暂存区、工作区都改变
附上官方解释:

其中,HEAD 表示版本库,index 表示暂存区,working tree 表示我们更改代码的工作区
Note: 在命令行窗口,使用git reflog命令时, 可以点击q来退出该命令
参考链接:
1. https://blog.csdn.net/php_xml/article/details/109492616 (文章简单易懂,一看就会,(๑•̀ㅂ•́)و✧)
2. git reset –mixed –soft –hard命令解释 (操作之后,对工作区和暂存区进行了比较)
3. git reset hard/soft/mixed区别 (有图片参考,对index head 理解更加地生动)
2. 第二种情况:push之后,代码已经更新到远程仓库 -> 这些改变已经在远程仓库
解决办法:
-
- 找到要撤回版本的版本号 -> 运行 git log
- 回退操作 -> 运行 git revert -n 版本号 (第一步找到的版本号)
- 再次提交 -> 运行 git commit -m 备注(随意写些备注,主要是注明哪个版本回退了)
- 再次push -> 运行 git push
附:
-
- 在第三步的之前,容易出现冲突,需要手动解决;
- 如果没有找到要commit的文件或这改动,我当时的解决办法是重新获取一遍远程仓库,你自己的repos(即 git pull origin yourbranchname );
参考链接:
1. Git恢复之前版本的两种方法reset、revert(图文详解) (讲解了原理,图文详解真的赞,感谢原作者(๑•̀ㅂ•́)و✧)
2. git如何撤销上一次commit(或已push) (简易讲解版)
3. https://www.cnblogs.com/lyy-2016/p/6509707.html (有作者自己的见解,有帮助)
最后,仍然感谢各位大牛的分享,才有了今天的总结,欢迎讨论指正~
本文来自博客园,作者:77工作室,转载请注明原文链接:https://www.cnblogs.com/z7luv/p/15021219.html
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。

浙公网安备 33010602011771号