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的话,那本地又变成和远程一样了,是解决不了问题的。
最新文章
- 使用TouchScript做2D按钮实现长按功能
- maven nexus
- A380上11万一张的机票什么享受?来看看
- 在DataTable 中增加一列
- MVC 提交表单
- MD中bitmap源代码分析--状态机实例
- 在SSH框架中使用Spring的好处(转)
- JS CSS 网页 简单 右侧 悬浮
- Struts1.X与Spring集成——第一种方案
- Typescript变量声明
- IdentityServer(13)- 添加JavaScript客户端
- MVC |分部视图 PartialView()
- Spark入门到精通--(第二节)Scala编程详解基础语法
- 系统windows版本修改
- netbeans连接数据库SQLserver2008
- The ";Out of socket memory"; error
- 推荐两个国外网站-帮你优化网站SEO和预测下期的PR值
- C++源码里没有./configure文件的问题
- 【转载】Python ConfigParser的使用
- linux下mysql的安装配置
热门文章
- SpringBoot服务器压测对比(jetty、tomcat、undertow)
- CSS3圆盘时钟
- Jquery简单的选项卡实现
- Registering Components-->;Autofac registration(include constructor injection)
- Mac下编译tesseract报错 DotProductAVX can't be used on Android
- 使用Idea 配置maven
- BFS - 广度优先搜索 - 邻接列表表示法
- ixgbe RSS原理分析
- Android自定义view双缓存技术
- 负载均衡之DNS域名解析