git reset的用法
git reset三个选项
--mix,--hard,--soft
数据
针对每个选项都是操作这个文件。
[root@centos demo]# git init
Initialized empty Git repository in /root/demo/.git/
[root@centos demo]# echo one >> a.txt
[root@centos demo]# git add a.txt
[root@centos demo]# git commit -m "first commit"
[master (root-commit) b7ee3a2] first commit
1 file changed, 1 insertion(+)
create mode 100644 a.txt
[root@centos demo]# echo two >> a.txt
[root@centos demo]# git commit -am "second commit"
[master 92ae9c4] second commit
1 file changed, 1 insertion(+)
[root@centos demo]# echo three >> a.txt
[root@centos demo]# git commit -am "third commit"
[master 0985eec] third commit
1 file changed, 1 insertion(+)
[root@centos demo]# echo four >> a.txt
[root@centos demo]# git commit -am "four commit"
[master 5bd480c] four commit
1 file changed, 1 insertion(+)
[root@centos demo]# git show-branch --more=4 #查看四次提交记录
[master] four commit
[master^] third commit
[master~2] second commit
[master~3] first commit
git reset --mix
在省略reset选项的时候,默认的就是使用--mix
[root@centos demo]# git reset HEAD~2
Unstaged changes after reset:
M a.txt
[root@centos demo]# git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a")
[root@centos demo]# cat a.txt
one
two
three
four
[root@centos demo]# git diff
diff --git a/a.txt b/a.txt
index 69f75fc..a4c0ca1 100644
--- a/a.txt
+++ b/a.txt
@@ -1,2 +1,4 @@
one
two
+three
+four
从运行结果可以看出来,--mix有以下特点:
假设使用reset命令从版本D回到版本B,那么HEAD就会指向B。同时,版本D的代码内容并不会删除,会保留版本D相对于B的diff。
可以使用git reset ORIG_HEAD回到之前的版本。
git reset --hard
对原始数据进行下面操作:
[root@centos demo]# git show-branch --more=4
[master] four commit
[master^] third commit
[master~2] second commit
[master~3] first commit [root@centos demo]# git reset --hard HEAD~2
HEAD is now at e57a55f second commit [root@centos demo]# git show-branch --more=4
[master] second commit
[master^] first commit [root@centos demo]# git status
On branch master
nothing to commit, working tree clean [root@centos demo]# cat a.txt
one
two
从运行结果可以发现,--hard选项有以下特点:
使用--hard选项回到版本B的啥时候,HEAD会回到版本B,同时,代码内容也会回到版本B,也就是说,版本B之后的内容都被删除了。
但是还是可以使用git reset ORIG_HEAD回到版本D。然后版本D的内容就会恢复,但是需要再次git add && git commit。
git reset --soft
[root@centos demo]# git show-branch --more=5
[master] four commit
[master^] third commit
[master~2] second commit
[master~3] first commit [root@centos demo]# git reset --soft HEAD~2 [root@centos demo]# git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage) modified: a.txt [root@centos demo]# git diff
#注意上面一个命令提示修改了a.txt,但是却没有diff [root@centos demo]# cat a.txt #a文件的内容仍旧没变
one
two
three
four [root@centos demo]# git reset ORIG_HEAD [root@centos demo]# git show-branch --more=5
[master] four commit
[master^] third commit
[master~2] second commit
[master~3] first commit
--soft选项很特别,和--mix很相似,区别是:
1、如果从D版本回到B版本,进行git diff时,不会显示版本D相对于版本B的diff,因为在B处执行git diff时,是和D进行diff,而不是和B进行diff(但是执行git status时,还是会提示有变化,但是可以忽略)
2、在从B版本回到D版本后,不用在进行git add && git commit。可以认为HEAD一直都指向D,执行B的只是一个tmp_head。
git reset的用法的更多相关文章
- Git reset 常见用法
Git reset 1. 文件从暂存区回退到工作区 2. 版本回退 1.1 git reset HEAD filename :回退文件,将文件从暂存区回退到工作区 //也可以使用 git reset ...
- 【Git 学习三】深入理解git reset 命令
重置命令(git reset)是Git 最常用的命令之一,也是最危险最容易误用的命令.来看看git reset命令用法. --------------------------------------- ...
- git reset 与 git revert的区别?
一,git reset的功能: 该命令修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本, 说明: 修改后,push到远程仓库时需要使用"git push -f"提 ...
- git revert用法以及与git reset的区别
git revert用法 git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交 * git revert HEAD ...
- Git复习(十三)之git revert用法及与git reset区别
git revert用法以及与git reset的区别 git revert用法 git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一 ...
- git reset 版本回退的三种用法总结
git reset (–mixed) HEAD~1 回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响) git reset –soft ...
- git reset用法
git 删除 错误 提交的 commit 方法: 根据–soft –mixed –hard,会对working tree和index和HEAD进行重置: git reset -- ...
- 代码回滚:git reset、git checkout和git revert区别和联系
git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为 ...
- [译]git reset
git reset 如果说git revert是一个安全的撤销方式, 那么git reset就是一个非常危险的方法了. 当你使用git reset撤销的时候, 你没有可能在回到最初了-他是一个永久的不 ...
随机推荐
- 使用Java+MySQL+Apache开发后台项目(一)
做前端开发的人越来越多,后端维护的人才越来越稀缺,这种趋势正在慢慢扩展.像我这种人总喜欢反其道而行之,做后端开发的人虽然减少了,但是工作量和工作资质都要求的更高了,随着人工智能的发展,需要后台处理的数 ...
- HBase数据库相关基本知识
HBase数据库相关知识 1. HBase相关概念模型 l 表(table),与关系型数据库一样就是有行和列的表 l 行(row),在表里数据按行存储.行由行键(rowkey)唯一标识,没有数据类 ...
- WebAPI HelpPage支持Area
WebAPI原生的HelpPage文档并不支持Area的生成,需进行如下改造: WebApiConfig: public static class WebApiConfig { public stat ...
- Winform知识汇总之多次绑定DataGridView的DataSource会报错 NullReferenceExcepti
最近做了一个winform的项目,数据绑定在datagridview中,datagridview中的数据需要删除,分页,更新等之类的操作,所以就涉及到了datagridview的重新绑定问题,而且这些 ...
- 从此使用linux系统,但是QQ是必不可少的!!该篇文章方法成功!!!已验证!!!!!
一开始,我在Ubuntu14.04下安装的QQ版本是WineQQ2013SP6-20140102-Longene, 但后来发现这个版本QQ在linux下问题很多,比如不能用键盘输入密码,QQ表情使用失 ...
- MySQL高级知识系列目录
MySQL高级知识(一)——基础 MySQL高级知识(二)——Join查询 MySQL高级知识(三)——索引 MySQL高级知识(四)——Explain MySQL高级知识(五)——索引分析 MySQ ...
- [SDOi2012]吊灯
嘟嘟嘟 这题想了半天,搞出了一个\(O(10 * d * n)\)(\(d\)为\(n\)的约数个数)的贪心算法,就是能在子树内匹配就在子树内匹配,否则把没匹配的都交给父亲,看父亲能否匹配.交上去开了 ...
- windows server 2012 安装 VC14(VC2015) 安装失败解决方案
原文地址:https://www.cnblogs.com/huoniao/articles/6186021.html 系统环境如下:cmd命令行-输入 systeminfo 如下图 - The VC1 ...
- linux+node.js+redis+mongodb+nginx环境的搭建
1.推荐购买阿里云服务器,使用Centos7.0的服务器版本,在创建完全系统并进入之后,第一步是更新服务器的相关组件 yum -y install gcc gcc-c++ openssl-dev ...
- java 生成txt文件
FileWriter fileWriter = new FileWriter("C:/Users/li/Desktop/a.txt"); fileWriter.write(“aaa ...