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

git撤销各种状态下的操作的更多相关文章

  1. Git撤销提交和修改相关操作

    团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢? 一.增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言, ...

  2. 如何高效撤销Git管理的文件在各种状态下的更改

    一.背景 企业中我们一般采用分布式版本管理工具git来进行版本管理,在团队协作的过程中,我们难免会遇到误操作,需要撤销更改的情况,那么我们怎么高效的进行撤销修改呢?对于还未提交到暂存区的代码怎么高效撤 ...

  3. Git撤销、回滚操作

    git的工作流 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的. 暂存区:已经 git add xxx 进去, ...

  4. git 在命令行与图形状态下使用详情

    http://blog.csdn.net/risky78125/article/details/50850545 http://blog.csdn.net/risky78125/article/det ...

  5. 从零开始使用git第三篇:git撤销操作、分支操作和常见冲突

    从零开始使用git 第三篇:git撤销操作.分支操作和常见冲突 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:gi ...

  6. IDEA环境下GIT操作浅析之二-idea下分支操作相关命令

    上次写到<idea下仓库初始化与文件提交涉及到的基本命令>,今天我们继续写IDEA环境下GIT操作之二--idea下分支操作相关命令以及分支创建与合并. 1.idea 下分支操作相关命令 ...

  7. Git 版本控制 在 WIN 下的一些使用方法

    这里记录一些 Git 在 Windows 操作系统下使用方法: 安装完毕后,先让Git 记录自己的名字: $ git config --global user.name "Your Name ...

  8. git 撤销提交的文件

    一.问题 近期在使用git时遇到一个问题,就是在git上传文件时,将一个100兆的大文件添加到了git,并执行了push操作,这时在上传完毕后,会提示这个错误 Large files detected ...

  9. 深入学习:Windows下Git入门教程(下)

    声明:由于本人对于Git的学习还处于摸索阶段,对有些概念的理解或许只是我断章取义,有曲解误导的地方还请见谅指正! 一.分支 1.1分支的概念. 对于的分支的理解,我们可以用模块化这个词来解释:在日常工 ...

随机推荐

  1. MapReduce:实现文档倒序排序,且字符串拼接+年+月+日

    写出MapReduce程序完成以下功能. input1: -- a -- b -- c -- d -- a -- b -- c -- c input2: -- b -- a -- b -- d -- ...

  2. BUG: scheduling while atomic 分析【转】

    本文转载自:https://blog.csdn.net/cfy_phonex/article/details/12090943 遇到一个典型的schedule问题.   <3>[26578 ...

  3. Linux下MySQL 5.6.24的编译安装与部署

    MySQL 5.6正式版发布了,相对于5.5版本作出了不少改进,其源码安装配置方式也有所变化,本文根据实际操作,不断尝试,精确还原了安装的具体步骤. 在Linux下安装MySQL前,先确认卸载系统自带 ...

  4. spring security使用哈希加密的密码

    之前我们都是使用MD5 Md5PasswordEncoder 或者SHA ShaPasswordEncoder 的哈希算法进行密码加密,在spring security中依然使用只要指定使用自定义加密 ...

  5. tomcat深入学习—权限篇

    如果想给一个应用程序配置权限,可能需要的代码量很多,但你知道吗,仅通过配置tomcat,就能有同样的效果(为一个web应用添加了权限) 效果:打开http://localhost:8080/searc ...

  6. Buildbot初探

    什么是Buildbot Buildbot是一个持续集成和自动化测试框架,我在毕业刚进VMware不久的一个和以色列人合作的项目中接触到Buildbot,当时我真的恨死它了...经常随意的提交了一些代码 ...

  7. [转] Android Fragment 你应该知道的一切

     转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42628537,本文出自:[张鸿洋的博客] 很久以前写过两篇Fragment的介 ...

  8. Sudoku Solver, 求数独

    问题描述:填充数独表中空元素.空元素为'.' 算法分析:没填充一个数,都要看这个数所在的行,列,小矩阵是否合法.然后还要看整个数独表是否正确,而判断整个数独表只能通过递归,因为前一个结果的判断要依赖后 ...

  9. hdu 1540 Tunnel Warfare 线段数区间合并

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) P ...

  10. Java条件语句之 if

    生活中,我们经常需要先做判断,然后才决定是否要做某件事情.例如,如果考试成绩大于 90 分,则奖励一个 IPHONE 5S .对于这种“需要先判断条件,条件满足后才执行的情况”,就可以使用if 条件语 ...