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

相关文章
|
17天前
|
网络安全 开发工具 git
配置本地环境以管理Git多账户SSH连接的方法
通过以上步駟设置后, 您可以轻松管理多個 Git 账户并且根据不同项目需求切换 SSH 密匙进行版本控制操作。
168 20
|
3月前
|
Java 程序员 项目管理
Java 程序员不容错过的 Git Flow 全套学习资料及应用方法详解 Git Flow
本文详细介绍了Git Flow技术方案及其在Java项目中的应用实例,涵盖分支管理、版本发布与紧急修复流程,帮助开发者掌握高效的代码管理方法,提升团队协作效率。附示例操作及代码下载链接。
90 0
|
6月前
|
开发工具 git C++
利用Cmake展示Git内容的方法
总的来说,CMake和Git是强大的工具,通过合理的使用,可以极大地提高开发效率。
120 24
|
6月前
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
227 10
|
存储 前端开发 Java
Git 仓库越来越大?不要慌!试试这个简单方法,轻松秒瘦身
Git 仓库越来越大?不要慌!试试这个简单方法,轻松秒瘦身
|
存储 开发工具 git
好的git管理方法,标明项目_编号_(功能,不过还是在没有bug出现时就提交为好)+Excel表管理的格式
好的git管理方法,标明项目_编号_(功能,不过还是在没有bug出现时就提交为好)+Excel表管理的格式
|
存储 Ubuntu 开发工具
在Ubuntu 18.04上安装Git的方法
在Ubuntu 18.04上安装Git的方法
220 0
|
存储 Ubuntu 开发工具
在Ubuntu 16.04上安装Git的方法
在Ubuntu 16.04上安装Git的方法
233 0
|
存储 Linux 开发工具
在Debian 8上安装Git的方法
在Debian 8上安装Git的方法
199 0
|
存储 Linux 编译器
在 CentOS 6.4 VPS 上安装 Git 的方法
在 CentOS 6.4 VPS 上安装 Git 的方法
133 0