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

最新文章

  1. 使用TouchScript做2D按钮实现长按功能
  2. maven nexus
  3. A380上11万一张的机票什么享受?来看看
  4. 在DataTable 中增加一列
  5. MVC 提交表单
  6. MD中bitmap源代码分析--状态机实例
  7. 在SSH框架中使用Spring的好处(转)
  8. JS CSS 网页 简单 右侧 悬浮
  9. Struts1.X与Spring集成——第一种方案
  10. Typescript变量声明
  11. IdentityServer(13)- 添加JavaScript客户端
  12. MVC |分部视图 PartialView()
  13. Spark入门到精通--(第二节)Scala编程详解基础语法
  14. 系统windows版本修改
  15. netbeans连接数据库SQLserver2008
  16. The "Out of socket memory" error
  17. 推荐两个国外网站-帮你优化网站SEO和预测下期的PR值
  18. C++源码里没有./configure文件的问题
  19. 【转载】Python ConfigParser的使用
  20. linux下mysql的安装配置

热门文章

  1. SpringBoot服务器压测对比(jetty、tomcat、undertow)
  2. CSS3圆盘时钟
  3. Jquery简单的选项卡实现
  4. Registering Components-->Autofac registration(include constructor injection)
  5. Mac下编译tesseract报错 DotProductAVX can't be used on Android
  6. 使用Idea 配置maven
  7. BFS - 广度优先搜索 - 邻接列表表示法
  8. ixgbe RSS原理分析
  9. Android自定义view双缓存技术
  10. 负载均衡之DNS域名解析