坑系列 (git ) -> git 拉错分支或 commit / push 之后的撤销操作

   由于本人时常粗心大意,多次拉错分支,甚至有时候push完了,才发现分支拉错了,总结了网上的一些解决办法,和自己在应用这些办法时,又遇到的问题,欢迎参与讨论 :)

1. 第一种情况:只是commit ,还没有push -> 这些改变还在暂存区没有到远程仓库


   解决办法:

    1. 找到上次提交的commit_id -> 运行 git reflog 
    2. 执行撤销 -> 运行 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 表示我们更改代码的工作区

参考链接:
   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之后,代码已经更新到远程仓库 -> 这些改变已经在远程仓库


   解决办法:

    1. 找到要撤回版本的版本号 -> 运行 git log 
    2. 回退操作 -> 运行 git revert -n 版本号 (第一步找到的版本号)
    3. 再次提交 -> 运行 git commit -m 备注(随意写些备注,主要是注明哪个版本回退了)
    4. 再次push -> 运行 git push 

   附:

    1. 在第三步的之前,容易出现冲突,需要手动解决;
    2. 如果没有找到要commit的文件或这改动,我当时的解决办法是重新获取一遍远程仓库,你自己的repos(即 git pull origin yourbranchname );

参考链接:
   1. Git恢复之前版本的两种方法reset、revert(图文详解)  (讲解了原理,图文详解真的赞,感谢原作者(๑•̀ㅂ•́)و✧)
   2. git如何撤销上一次commit(或已push)  (简易讲解版)
   3. https://www.cnblogs.com/lyy-2016/p/6509707.html (有作者自己的见解,有帮助)

 

最后,仍然感谢各位大牛的分享,才有了今天的总结,欢迎讨论指正~

posted @ 2021-07-16 17:37  77工作室  阅读(1000)  评论(3编辑  收藏  举报