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

相关文章
|
9月前
|
Shell 开发工具 git
git拉取分支的方法?
1.在工作空间下,右键,选择Git Bash 进入到里面
142 0
|
5月前
|
存储 前端开发 Java
Git 仓库越来越大?不要慌!试试这个简单方法,轻松秒瘦身
Git 仓库越来越大?不要慌!试试这个简单方法,轻松秒瘦身
|
2月前
|
开发工具 C语言 数据安全/隐私保护
git提交代码到远端仓库的方法详解
git提交代码到远端仓库的方法详解
|
7月前
|
开发工具 数据安全/隐私保护 git
git使用_idea快捷方法(下)
idea里面的设置 打开idea如图设置
38 0
|
3月前
|
网络安全 开发工具 数据安全/隐私保护
[Git]关联远程库的两种方法及配置
本篇文章对gitee公钥配置、同电脑连接多个gitee账号公钥配置等方法进行阐述, 如果文中阐述不全或不对的,多多交流。
74 0
[Git]关联远程库的两种方法及配置
|
4月前
|
开发工具 git
GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件(二)
GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件(二)
|
4月前
|
算法 安全 Linux
GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件(一)
GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件(一)
|
4月前
|
开发工具 git
git代码合并、git解决冲突的方法?
Git是一种分布式版本控制系统,它提供了多种方法来合并代码和解决冲突。下面是两个常见的场景以及对应的操作步骤:
66 0
|
9月前
|
开发工具 git
Git撤销使用方法
介绍 撤销是指恢复先前的状态或操作,以便回退或取消更改,Git提供了多种方式来进行撤销,撤销对文件的修改、撤销暂存的修改、撤销提交、撤销合并等; 详细教程 1、撤销对已经暂存区的文件的修改 这个命令会将指定文件从暂存区中移除,但保留对工作目录中文件的修改。这相当于撤销了对文件的暂存操作。 git reset HEAD <文件名> 2、撤销当前分支的提交 它是用于将当前分支的 HEAD 指针移动到前一个提交,并丢弃指定数量(<num>)的最近提交,包括这些提交所引入的更改。 当你意识到最近的一次合并操作引入了错误或不必要的更改时,你希望撤销这些更改并回到合并之前的状态。当你想要回滚最近的几个提交
88 0
|
4月前
|
Shell 测试技术 开发工具
在 Git 中撤消更改的 6 种方法!
在 Git 中撤消更改的 6 种方法!
351 1