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

时间: 2024-09-16 08:17:03

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

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

增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言,这个例子中是HEAD,实际上可以指定其他有效的提交名称. 如果参数是小写的-c,就会打开预先设置好的编辑器,以便在已有的提交留言基础上编辑修改. 增补提交只能针对最后一个提交,如果想更正好几个提交之前的某个错误,则须使用git revert这个命令. 反转提交 反转已经提交的改动,使用git revert命令,此命令通过在版本库中创建一个"反向的"新提交来抵消原来提交的改动. 通常Gi

如何在 Git 里撤销(几乎)任何操作

任何版本控制系统的一个最有的用特性就是"撤销 (undo)"你的错误操作的能力.在 Git 里,"撤销" 蕴含了不少略有差别的功能. 当你进行一次新的提交的时候,Git 会保存你代码库在那个特定时间点的快照:之后,你可以利用 Git 返回到你的项目的一个早期版本. 在本篇博文里,我会讲解某些你需要"撤销"已做出的修改的常见场景,以及利用 Git 进行这些操作的最佳方法. 撤销一个"已公开"的改变 场景: 你已经执行了 git

Windows 10在锁屏状态下打开某种应用程序的操作技巧

在Win10的锁屏界面,右下角有三个图标,中间有个像时钟的图标就是所谓的"轻松使用"按钮,里面有讲述人.放大镜.屏幕键盘等功能,这些功能我们可以修改成我们常用的应用程序,这样将大大的方便我们的操作,那么该如何修改呢? 默认情况下在锁屏界面点击右下角中间的图标会弹出"轻松使用"菜单 具体方法如下: 1.在Cortana搜索栏输入regedit,按回车键进入注册表编辑器; 2.定位到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windo

在打印预览状态下编辑Word文档

我们在打印预览状态下查看Word文档时,有时会发现不符合打印要求的地方,需要重新编辑,通常我们会关闭打印预览回到编辑状态.其实我们只需进行如下操作,就可以在打印预览状态下进行Word文档编辑修改. 方法如下:在打印预览状态下,单击打印预览工具栏的"放大镜"图标,鼠标指针由"放大镜"变为闪烁的光标,就可以编辑该文档了.

JavaScript模拟重力状态下抛物运动的方法

 这篇文章主要介绍了JavaScript模拟重力状态下抛物运动的方法,实例分析了javascript操作dom元素模拟运动的方法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JavaScript模拟重力状态下抛物运动的方法.分享给大家供大家参考.具体分析如下: 这段JavaScript代码模拟重力状态下的抛物运动,可设置以下参数:横向初速度.纵向初速度.重力加速度(如果这个加速度是一个随时间变化的值,就能达到其他非匀加速运动的效果了).动画间隔时间等,相对专业   代码如下

关机状态下,手机流量仍然莫名丢失

核心提示:明明记得在睡前把手机关了,为何白天开机后竟然得知耗费了350MB(兆)流量?近期,不断有智能手机用户反映关于手机"跑流量"的怪异事件.昨天下午,河南省联通公司市场销售部业务主管张涛应记者之邀,为市民分析几种常见的"跑流量"原因. 怪象1 关机状态下,手机流量仍然莫名丢失 求解:"求高手支招,四凤(iphone4)为啥处于关机状态下还是跑流量!"昨日,在媒体工作的路女士向同事发出求助信号,前一天,她的苹果手机睡前关机了,但次日开机后发现,

wifi状态下无法登录

问题描述 版本号 2.1.7 demowifi状态下无法登录成功EMChatManager+Login::xmpp:didLoginWithInfo:error: --- error:server not reachable.其余操作比如注册,登录校验(用户名不存在,密码错误)等都正常.用手机网络可登录成功. 解决方案 我靠!终于解决了!plist 中要设置Required background modes!!!!!!!!解决方案二:[EaseMob sharedInstance].sdkVer

请问怎么才能在锁定计算机的状态下关机、强制关机、注销、重启、休眠、睡眠?

问题描述 之前我用的是下面的,但是锁定的状态下就失效了,请问有什么别的方法吗?PublicClassWindowsControllerPublicEnumRestartOptionsLogOff=0PowerOff=8Reboot=2ShutDown=1Suspend=-1Hibernate=-2EndEnumPublicStructureLUIDDimLowPartAsIntegerDimHighPartAsIntegerEndStructurePublicStructureLUID_AND_

出现以下系统错误: 该项不适于在指定状态下使用

问题描述 privatevoidbutton1_Click(objectsender,EventArgse){Serverserver=newServer();server.Connect("localhost");Databasedata=server.Databases.FindByName("lala");if(data!=null){data.Drop();}data=newDatabase("lala","lala"