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 登录 ...
随机推荐
- charles4.2下载与破解方法以及配置https.RP
Charles下载地址 地址:https://www.charlesproxy.com/latest-release/download.do 2. Charles破解 破解地址:https://www ...
- HDU 4055 Number String (计数DP)
题意:由数字1到n组成的所有排列中,问满足题目所给的n-1个字符的排列有多少个,如果第i字符是‘I’表示排列中的第i-1个数是小于第i个数的. 如果是‘D’,则反之. 析:dp[i][j] 表示前 i ...
- static在C和C++里各代表什么含义
转自:http://blog.csdn.net/wanglongfei_hust/article/details/10011503 static关键字有三种使用方式,其中前两种只指在C语言中使用,第三 ...
- FileAppender
http://logback.qos.ch/manual/appenders.html#FileAppender <configuration> <appender name=&qu ...
- OpenCV4Android安装
转:http://blog.csdn.net/gao_chun/article/details/49359535 1.下载及目录介绍 2.将 OpenCV引入 Android Studio 3.更新 ...
- WINAPI和APIENTRY是一样的
今天写线程函数时,发现msdn中对ThreadProc的定义有要求:DWORD WINAPI ThreadProc(LPVOID lpParameter); 不解为什么要用WINAPI宏定义,查了后发 ...
- JDK8新特性:使用stream、Comparator和Method Reference实现集合的优雅排序
大家对java接口Comparator和Comparable都不陌生,JDK8里面Comparable还和以前一样,没有什么改动:但是Comparator在之前基础上增加了很多static和defau ...
- 20145233《网络对抗》Exp7 DNS网络欺诈技术防范
20145233<网络对抗>Exp7 DNS网络欺诈技术防范 实验问题思考 通常在什么场景下容易受到DNS spoof攻击 公共的无线局域网中,容易受到攻击者的攻击,因为这样就会连入局域网 ...
- Echarts X轴内容过长自动隐藏,鼠标移动上去显示全部名称方法
最近公司做项目,使用echarts做开发,碰到一些数据的名称很长导致图例展示的效果不是很好,自己写了一个方法,当X轴内容过长时自动隐藏,鼠标移动上去显示全部名称 样例: 图二是鼠标移动到名称显示的,怎 ...
- Linux Guard Service - 守护进程的作用、用途、父进程标识的特点
让test2直接成为守护进程 [root@localhost 02]# cat test2.c //test2 #include<stdio.h> #include<unistd.h ...