• git撤销各种状态下的操作


    使用Git时会出现各种各样的问题,下面是几种情况下怎么反悔的操作

    一,未加入缓存区,撤销文件修改

         git checkout -- file

    二,已加入缓存区,撤销文件提交

         git reset HEAD file

         或git rm --cached file

    三,已提交到本地,回滚提交

         git reset --HARD commit_id/HEAD^n

    四,已push到远程

    1,git revert的方式

          1)git revert commit_id   //将要撤销的提交revert为一次新的提交,这样不仅提交被撤销了,而且本地分支也比远程分支多一次提交

          2)git push origin master //推送到远程

          这种方式是最方便的,但缺点是多了2次无用的commit,使整个分支的commit不再整洁。

    2,如果远程仓库不是使用git init --bare建立的裸仓库(裸仓库无法回滚提交),而是一个普通仓库(通过git init建立),那么你可以登录到远程服务器,然后回滚远程分支,然后再把本地分支回滚。

          

    3,可删除远程分支,然后回滚本地分支,然后将本地分支push到origin

              1)git branch xxx_backup                                //创建备份分支

              2)git push origin xxx_backup:xxx_backup  //将备份分支推送到origin

              3)git checkout  xxx                                           //切回要撤销修改的分支

              4)git reset --hard commit_id                          //撤销本地commit

              5)git push origin :xxx                                      //删除远程xxx分支

              6)git push origin xxx:xxx                                //将本地撤销修改后的xxx分支推送到origin

              7)git branch -d xxx_backup                          //删除本地备份分支

                    git push origin :xxx_backup                      //删除远程备份分支

              上述步骤5执行时可能会出现错误,如下:

              

             尤其是远程仓库是在github或oschina上时,因为这些网站中将某分支设置成了当前分支,而删除当前分支是不允许的,所以要在这些网站的设置中切换当前分支为其它分支,然后再此执行步骤5.

    4,方法3中,如果是自己建立的仓库,默认分支是master,我没找到修改默认分支的办法,master分支也就无法删除,方法4也就没用了。但有另一种方法可以解决问题

          1)登录服务器,备份中央仓库

                mv demo.git demo_backup.git

          2)新建一个空的demo.git       

                git init --bare demo.git

          3)通过回滚,修复本地提交到正常状态

                git reset --hard 提交id

          4)推送本地的master分支到服务器的demo.git

                git push remote master:master

          这样的做法,可以保存之前的提交记录,是比较好的修复方式;这种方法比较适合修复出现代码覆盖的情况

    如果中间出现问题,请通过demo_backup.git找回中央仓库


    错误的做法

    1,直接reset本地提交,然后push到origin

              这种做法是错误的,git会报错,原因是远程仓库中该分支比本地分支多n次commit,只能先pull,再push。而如果先pull的话,那本地又变成和远程一样了,是解决不了问题的。

  • 相关阅读:
    Ubuntu升级软件和ubuntu升级系统的命令
    ASP 中如何根据数据库中取出的值来判定 checkbox或radio 的状态是否为选中
    C# 根据年、月、周、星期获得日期等
    鼠标右击事件
    【原创】VB利用堆栈实现算术表达式计算
    【算法】VB6实现哈夫曼编码生成的类
    【算法】VB 24点计算
    【算法】VB实现后缀表达式转中缀表达式
    C#操作Excel替换关键字 Johan
    C#递归遍历文件夹下的文件 Johan
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/6991571.html
Copyright © 2020-2023  润新知