Git命令之回退篇 git revert git reset
Git command之回退篇
欲练回退 必先了解:HEAD、index、WorkingCopy
HEAD: 当前所在的分支版本顶端的别名,也就是最新的一次commit. git commit 之后与HEAD一致
index: staging area,git add 之后放入该区域
WorkingCopy: 当前修改等操作所在区域,没有 git add 和 git commit 操作
git reset HEAD --file (单个文件)
可与git checkout --file配合
回退暂存区里的某个文件,还原为HEAD commit里该文件的状态,撤销从上一次commit之后所有的操作。或者说是从HEAD commit里重新拉到暂存区覆盖当前的(被add乱掉的)文件。但是working copy里没有任何变化。此时如果想丢掉working copy里的修改,执行git checkout --file.
git reset --hard HEAD
影响同下面介绍的<git reset --hard 目标版本号>,只是HEAD位置看起来没有变化。小技巧:上个版本用HEAD^或者HEAD~1,上上个版本HEAD^^或者HEAD~2,上100个版本HEAD~100
git reset --hard 目标版本号
版本号指:commit生成的hash码,可用 git log 命令查看
修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,最后需要用 git push -f 强推到远端
--hard参数将会blow out everything.它将重置HEAD返回到另外一个commit,重置index以便反映HEAD的变化,并且重置working copy也使得其完全匹配起来。
这是一个比较危险的动作,具有破坏性,数据因此可能会丢失!如果真是发生了数据丢失又希望找回来,那么只有使用:git reflog命令了。makes everything match the commit you have reset to.你的所有本地修改将丢失。如果我们希望彻底丢掉本地修改但是又不希望更改branch所指向的commit,则执行git reset --hard = git reset --hard HEAD.
i.e. don't change the branch but get rid of all local changes.另外一个场景是简单地移动branch从一个到另一个commit而保持index/work区域同步。这将确实令你丢失你的工作,因为它将修改你的work tree!
git reset --soft 目标版本号
--soft参数Git重置HEAD到另外一个commit,HEAD位置改变,但index,working copy都不会做任何变化,所有的在original HEAD和你重置到的那个commit之间的所有变更集都放在stage(index)区域中。
git reset --mixed 目标版本号
--mixed是reset的默认参数,也就是当你不指定任何参数时的参数。它将重置HEAD到另外一个commit,并且重置index以便和HEAD相匹配,但working copy不会被更改。所有该branch上从original HEAD(commit)到你重置到的那个commit之间的所有变更(未git add的操作)将作为local modifications保存在working area中,你可以接着coding,之后再进行git add, git commit.
总结:--hard --mixed(default) --soft 分别覆盖3个、2个、1个位置的代码,--mixed(默认的参数)只会保留working copy里的代码
git revert -n 目标版本号
与git reset不同的是,复制了一个目标版本(某个想要回退到的历史版本)加在当前分支的最前端。而git reset是HEAD指针跳到目标版本,但将跳过的版本丢弃掉了。
use 'git commit -m "the name of the new release" ' to commit
use 'git push' to push
git commit --amend
改写commit,包括改写提交的文件和追加文件到提交中。
还可以对这种改写回退,用git reflog得到相应的版本号,然后git reset --soft HEAD@{xxx}
Git命令之回退篇 git revert git reset的更多相关文章
- Git命令汇总(补充篇)
上一篇<Git命令汇总基础篇>总结了使用Git的基本命令,这一篇作为补充主要给大家讲一些平时使用中的技巧和总结 . 学会了这些命令,已经基本解决了使用Git中大部分问题. 1.gitign ...
- Git命令汇总(基础篇)
自己用Git有一段时间了,随着项目越来越多,功能分支也随之增加,从简单的基础命令到随心所欲,需要自己不断地去尝试总结,下面来分享一下我的Git使用总结. 本章基础篇主要讲解一些Git代码提交流程和Gi ...
- git 命令行回退到某个指定的版本
1.在开发过程中遇到合并别人的代码或者合并主分支的代码导致自己的分支代码冲突或有别的问题,这时我们需要回退某个git提交历史的代码 用一下命令 git reset --hard 139dcfaa558 ...
- Git命令详解
一个中文git手册:http://progit.org/book/zh/ 原文:http://blog.csdn.net/sunboy_2050/article/details/7529841 前面两 ...
- 你应该知道的基础 Git 命令
我们在早先一篇文章中已经快速介绍过 Vi 速查表了.在这篇文章里,我们将会介绍开始使用 Git 时所需要的基础命令. Git Git 是一个分布式版本控制系统,它被用在大量开源项目中.它是在 2005 ...
- 【转载】git命令和svn的对比
首先,要明确的是,git和svn是完全不同的两种管理方式.他们的命令不是完全对等的. 下面只是一些相似方法的参考,而已. 参考 http://blog.csdn.net/chen198746/arti ...
- Git命令的简单整理大全
创建目录和查看路径 mkdir 创建目录 cd 进入到目录里面pwd 用于显示当前的目录cat 查看文件内容 Git命令使用说明 初始化一个目录成git的仓库(版本库)包括暂存区和ma ...
- 2015继续任性——不会Git命令,照样玩转Git
最近事情比较多,一眨眼,已经半个月没有写博客了~不得不感慨光阴似箭啊!当然,2015年有很多让我们期待的事情,比如win10正式版..NET开源.VS2015等等.想想都让人兴奋啊~~ 为了迎接VS2 ...
- github网站介绍、并使用git命令管理github(详细描述)
本章学习: 1)熟悉github网站 2)通过git命令远程管理github, 3)git命令使用ssh key密钥无需输入账号密码 1.首先我们来熟悉github网站 1.1 注册github 登录 ...
随机推荐
- java中的集合类总结
在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现,我在使用和面试的时候频 频遇到这样的“抉择” . :)(主要还是面试的时候) 久而久 ...
- RabbitMQ的四种ExChange
在message到达Exchange后,Exchange会根据route规则进入对应的Queue中,message可能进入一个Queue也可能进入对应多个Queue,至于进入哪个Queue或者是说哪个 ...
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoader
一直报这个错误 错误原因jar包没有导入到.classes文件下,需要导入到此文件下,因为用的是user library,所以只有逻辑导入,没有实际导入,切换下就好了,具体看如下文章 http://w ...
- Spring框架总结(三)
SpringIOC容器 一.创建对象 SpringIOC容器,是spring核心内容. 作用: 创建对象 & 处理对象的依赖关系 IOC容器创建对象: 创建对象, 有几种方式: 1) 调用无参 ...
- (转)打造一套UI与后台并重.net通用权限管理系统
原文地址:http://www.cnblogs.com/LRBPMS/p/3425997.html 一.前言 从进行到软件开发这个行业现在已经有几年了,在整理出这个套开发框架之前自己做了不少重复造轮子 ...
- Canvas vs. SVG[转]
Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个 ...
- vc和halcon数据的相互赋值
// HTuple→VC 数据类型转换 HTuple hTuple = 1234; int i = hTuple[0].I(); // i=1234 long l = hTuple[0].L(); / ...
- linux mysql 权限
原文地址:http://www.cnblogs.com/eczhou/archive/2012/07/12/2588187.html Linux下mysql新建账号及权限设置 1.权限赋予 说明:my ...
- java学习(六)面向对象 final关键字 多态
1.被fnial修饰的方法不能被重写,常见的为修饰类,方法,变量 /* final可以修饰类,方法,变量 特点: final可以修饰类,该类不能被继承. final可以修饰方法,该方法不能被重写.(覆 ...
- Android 使用pk10系统架设RecyclerView实现轮播图
一.需求 ViewPager有个天生的缺陷是View无法重用,此外pk10系统架设详情咨询[企娥166848365]ViewPager的滑动过程会频繁requestLayout,尽管可以通过addVi ...