git 各种状态下撤销修改的方法

简介: 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 的话,那本地又变成和远程一样了,是解决不了问题的。

相关文章
|
13天前
|
算法 网络安全 开发工具
[Git]关联远程库的两种方法及配置
本文介绍了 git 的四种连接方式:ssh 连接、HTTPS 连接、SVN 连接和 SVN + ssh 连接,重点讲解了 HTTPS 和 ssh 连接方式的配置及注意事项。文章详细解释了 HTTPS 连接的身份验证过程、常见问题及解决方案,以及 ssh 连接的公钥和私钥的创建、配置方法。此外,还介绍了如何在同一台电脑上连接多个 gitee 账号的方法。
48 0
[Git]关联远程库的两种方法及配置
|
3月前
|
存储 Ubuntu 开发工具
在Ubuntu 18.04上安装Git的方法
在Ubuntu 18.04上安装Git的方法
50 0
|
3月前
|
存储 Ubuntu 开发工具
在Ubuntu 16.04上安装Git的方法
在Ubuntu 16.04上安装Git的方法
29 0
|
3月前
|
存储 Linux 开发工具
在Debian 8上安装Git的方法
在Debian 8上安装Git的方法
33 0
|
3月前
|
存储 Linux 编译器
在 CentOS 6.4 VPS 上安装 Git 的方法
在 CentOS 6.4 VPS 上安装 Git 的方法
36 0
|
3月前
|
存储 Linux 网络安全
在CentOS 7上安装Git的方法
在CentOS 7上安装Git的方法
255 0
|
4月前
|
存储 开发工具 git
好的git管理方法,标明项目_编号_(功能,不过还是在没有bug出现时就提交为好)+Excel表管理的格式
好的git管理方法,标明项目_编号_(功能,不过还是在没有bug出现时就提交为好)+Excel表管理的格式
|
5月前
|
开发工具 git
Git恢复之前版本的两种方法reset、revert(图文详解)
Git恢复之前版本的两种方法reset、revert(图文详解)
523 0
|
6月前
|
存储 前端开发 Java
Git 仓库越来越大?不要慌!试试这个简单方法,轻松秒瘦身
Git 仓库越来越大?不要慌!试试这个简单方法,轻松秒瘦身
|
开发工具 数据安全/隐私保护 git
git使用_idea快捷方法(下)
idea里面的设置 打开idea如图设置
55 0