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的话,那本地又变成和远程一样了,是解决不了问题的。
git撤销各种状态下的操作的更多相关文章
- Git撤销提交和修改相关操作
团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢? 一.增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言, ...
- 如何高效撤销Git管理的文件在各种状态下的更改
一.背景 企业中我们一般采用分布式版本管理工具git来进行版本管理,在团队协作的过程中,我们难免会遇到误操作,需要撤销更改的情况,那么我们怎么高效的进行撤销修改呢?对于还未提交到暂存区的代码怎么高效撤 ...
- Git撤销、回滚操作
git的工作流 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的. 暂存区:已经 git add xxx 进去, ...
- git 在命令行与图形状态下使用详情
http://blog.csdn.net/risky78125/article/details/50850545 http://blog.csdn.net/risky78125/article/det ...
- 从零开始使用git第三篇:git撤销操作、分支操作和常见冲突
从零开始使用git 第三篇:git撤销操作.分支操作和常见冲突 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:gi ...
- IDEA环境下GIT操作浅析之二-idea下分支操作相关命令
上次写到<idea下仓库初始化与文件提交涉及到的基本命令>,今天我们继续写IDEA环境下GIT操作之二--idea下分支操作相关命令以及分支创建与合并. 1.idea 下分支操作相关命令 ...
- Git 版本控制 在 WIN 下的一些使用方法
这里记录一些 Git 在 Windows 操作系统下使用方法: 安装完毕后,先让Git 记录自己的名字: $ git config --global user.name "Your Name ...
- git 撤销提交的文件
一.问题 近期在使用git时遇到一个问题,就是在git上传文件时,将一个100兆的大文件添加到了git,并执行了push操作,这时在上传完毕后,会提示这个错误 Large files detected ...
- 深入学习:Windows下Git入门教程(下)
声明:由于本人对于Git的学习还处于摸索阶段,对有些概念的理解或许只是我断章取义,有曲解误导的地方还请见谅指正! 一.分支 1.1分支的概念. 对于的分支的理解,我们可以用模块化这个词来解释:在日常工 ...
随机推荐
- 实验一 Linux初步认识
遇到的困难和心得体会: 1.在操作过程中,有道作业是建立一个opt/forloutest的文件,而我建立了一个 OPT文件,cd OPT,却显示not a directory,通过阅读<linu ...
- Terms of Company
CMD系统:中国机车远程监视与诊断系统,由车载子系统.车地数据传输子系统和CMD地面综合应用子系统三部分组成. LKJ:列车运行监控装置,机车运行过程中与行车安全相关的信息,如司机号.车次.公里标.速 ...
- Intellij IDEA生成serialVersionUID
默认情况下Intellij IDEA不会提示继承了Serializable接口的类生成serialVersionUID的警告.如果需要生成serialVersionUID,就要在Preferences ...
- Java 关于assert
昨天在看NIO源码的时候,看到这样一句,顿时懵逼了 : assert (i >= 0); assert关键词我是有映像的, 中文叫断言.但是从来没有去了解过它的功能, 今天在感冒中抽出时间, 把 ...
- JNIjw04
1.VC6(CPP)的DLL代码: #include<stdio.h> #include "jniZ_JNIjw04.h" #include <string> ...
- python学习笔记(excel中处理日期格式)
涉及到处理excel文件中日期格式数据 这里自己整理下 两种方法 代码如下: @classmethod def get_time(cls, table, nrows): testtime = [] f ...
- Python 乘法口诀表
环境 Anaconda3 Python 3.6, Window 64bit 目的 输出9*9 乘法口诀表 代码 # -*- coding: utf-8 -*- ''' 1*1=1 2*1=2 2*2= ...
- Kinect 2.0 默认姿势的中文意思
RaiseRightHand/RaiseLeftHand 抬起左右手高于肩膀一秒Psi 举起双手高于肩膀一秒Tpose T姿势Stop 右手放下,左手缓慢贴住身侧(腰以下)或者左右调换Wave 挥手 ...
- 10074 启用开发者模式 for vs2015rc
1. 关于VS2015RC 有两个版本,它们都包含了Windows 10 SDK. 社区版:免费,可以开发Windows UAP应用.iOS和Android应用.在 帮助->注册产品 菜单可以登 ...
- sizeof结构体
规则1:结构体的对折长度为其基本数据成员的长度的最大值. 规则2:指定边界情况下,结构体的对折长度为自身对折长度和指定对折长度中较小者. 规则3:当行内结构体的基本数据成员的起始地址必须为其长度的整数 ...