【Git】Git reset/revert的应用

课下来自己动手试试git的命令

主要尝试及记录

git reset --hard
git reset --soft
git revert

以上3个命令的具体作用及区别,这些命令主要用于撤销修改,但又各有些小区别

尝试准备

首先,为了制造合适的测试环境,我选择重新初始化一个本地git仓库来尝试,因为不涉及到push到远程仓库,所以也就不需要远程仓库了,这个本地仓库纯用于测试

了解HEAD

为了更加方便理解命令的作用不同,我们还需要了解一个HEAD的概念
HEAD简单来说,指的就是当前当前分支的最近一次提交后的版本,也就是说,HEAD代表的是最新的版本,根据这个概念,我们还可以知道HEAD就是指上一个版本,同理HEAD就是再上一个版本,因为(英文符号shift+6)不太方便,我们也可以以HEAD~x来表示距离最新版本的之前几个版本

建立本地仓库并添加文件

建立本地git仓库并创建提交a.md文件

横向对比

准备工作做好后,我们就来试试几个命令
首先,我们先对a.md进行3次编辑及提交以产生3个版本记录

对a.md进行3次编辑并提交
经过3次编辑提交的a.md

这里引入了一个log的新用法git log --oneline,这个log命令能够让我们相对直观的看到最近的版本记录并标识出提交版本号
在这个情况下,我们的工作区和暂存区都是干净的,我们不想要第三次提交了,我们来试试三个命令的不同

git reset --hard

使用git reset --hard HEAD^

这时候我们看到操作成功,我们来看一下对于文件产生了什么作用,首先查看a.md,并查看状态

git reset --hard HEAD^之后的a.md

reset --hard之后的status

我们能看到,reset --hard命令不仅将修改的文件变为了第二次提交的状态,并且不用我们再次commit
这时候我们再log --oneline看一下

git log --oneline

我们看到,我们的第三次提交记录被抹去了,也就是说,reset --hard的作用差不多是完全重置到某个版本并且销毁提交记录,本能的感觉到这个操作比较危险,我们来看一下历史的log

git reflog

可以看到我们当前的HEAD确实处于了第二次编辑提交的状态,按下不表,接着试试--soft

git reset --soft

之前的记录已经被毁了,但是通过查阅资料,我们是可以恢复的

git reflog及git reset --hard {版本号}

我们从git reflog中可以看到,第三次编辑并提交的版本号为0379f9d,所以我们用--hard+版本号参数的命令回到三次编辑并提交的状态,接着尝试--soft
同样的,我们不想要第三次提交,希望回退到第二次提交

git reset --soft HEAD^

看到操作成功了, 但是并没有什么提示,那我们看看git状态和a.md的状态吧

git status
a.md

我们看到了,--soft命令,仅仅是把我们的第三次‘commit’的操作给撤销了,a.md处于第三次编辑完成、add完成,但未提交的状态
简单来看,也就是说--soft命令是撤销指定版本内容的那一次commit,其他的东西都不改变,接着试试revert命令

git revert

我们再次使用git reflog查询版本号并回到三次编辑提交的状态,同样,还是不希望保留第三次编辑提交

git reset --hard

然后我们试试revert

git revert

在回到3次编辑提交的版本后,我进行了一次log查询及状态查询,状态显示没有待提交的的东西,但是在进行revert想回到第二次编辑的状态时,提示失败,失败后再查看状态看到了a.md的unmerged的提示,讲道理,我到这里已经有点懵逼了,就按照提示,我再进行了一次commit,并产生了一条“由于revert失败,提交一次第三次编辑的a.md”的修改版本记录,这一点有点摸不到头脑,回头还是会问一下老师,总之,我们继续
我们还会是向回到第二次编辑状态,尝试git revert

git revert

我们看到,操作成功了,并且自动打开了vim让我们编辑本次变动的提交信息,我们直接保存退出
操作成功后,查看status并查看a.md的状态

status及log
revert后的a.md

我们发现a.md被改变了,改成了一个奇怪的样子,到这里我已经完全懵逼了,,所以我觉得从头来一次纯净版本的revert
重新建立b.md并编辑提交3次

新建b.md

我们来直接试试revert到第二次编辑

git revert
revert后的b.md

我们看到这次的revert操作比较成功,但是由于目标是第二次编辑提交的版本,所以在revert的时候接连弹出了两个revert的commit信息输入框,完成后的log如下图,生成了两个新log,一个是回退到第三次编辑提交、一个是回退到第二次编辑提交
从这里有两步我们就可以看出,revert命令会讲文件修改为目标版本的上一个版本,也就是撤销了修改及add、commit

小结

其实到这里,我还是有点懵逼的,但是基本的效果大概有了一定了解

git reset --hard

毁灭性质的直接将版本重置到指定版本的状态,直接删除指定版本的commit内容,同时如果本地有修改内容话也会丢失
事了拂衣去,并不会留下通常能查到的版本记录,仅能在git reflog查询

git reset --soft

只告诉Git将其他的commit重置到HEAD,并不影响工作区文件
同样不会保留常规log

git revert

这其实算是一个进度往前走的逆向提交,也就是说HEAD版本及提交记录将会继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

大概就是这么多浅显理解,还有很多不足,希望能够在今后的常规使用中逐渐加深理解!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • Add & Commit git init 初始化一个 Git 仓库(repository),即把当前所在目录变成...
    冬絮阅读 4,804评论 0 8
  • 一、基本概念: 注:对于git的分布式概念及其优点,不重复说明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大厂offer阅读 1,415评论 0 3
  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 2,369评论 0 1
  • 其实使用git已经有两年多时间了,但是对Git的概念一直懵懵懂懂,平时常用的命令就那么几个,而且大部分的时候都是直...
    Claire_wu阅读 596评论 0 5
  • 天津最著名的打卡景点应该就是天津之眼了,一个建设在大桥上的摩天轮,估计也是仿造伦敦眼的概念,有意思的是天津之眼周边...
    溜溜达达走走阅读 328评论 0 0