二、GIT基础-撤消修改

4、撤消修改

我们编辑Hello.txt文件,添加一行新的内容后保存,这时我们发现最后一行的内容添加有误,我们需要删除它。这时我们可以选择手工删除刚才添加的最后一行,把文件恢复,我们也可以使用git status先查看状态:

Hello world
first modify
second modify
three modify
four modify
[root@node1 git-test]# echo "five modify" >>Hello.txt 
[root@node1 git-test]# cat Hello.txt 
Hello world
first modify
second modify
three modify
four modify
five modify
[root@node1 git-test]# 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:   Hello.txt

no changes added to commit (use "git add" and/or "git commit -a")
你可能会发现,Git告诉你,git checkout –file可以删除工作区的修改:
[root@node1 git-test]# git checkout -- Hello.txt 
[root@node1 git-test]# git status
On branch master
nothing to commit, working tree clean
You have new mail in /var/spool/mail/root
[root@node1 git-test]# cat Hello.txt 
Hello world
first modify
second modify
three modify
four modify
我们再看另一种情况,
[root@node1 git-test]# echo "five modify" >>Hello.txt 
[root@node1 git-test]# git add Hello.txt 
[root@node1 git-test]# git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   Hello.txt

[root@node1 git-test]# echo "six modify" >>Hello.txt 
[root@node1 git-test]# git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   Hello.txt

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:   Hello.txt

[root@node1 git-test]# git checkout -- Hello.txt 
[root@node1 git-test]# git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   Hello.txt

[root@node1 git-test]# cat Hello.txt 
Hello world
first modify
second modify
three modify
four modify
five modify

最后我们总结一下:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。最后要注意git checkout –file命令中的--,这个很重要,如果没有—这个命令就是另外的作用了。我们在后面具体会何用。
现在我们把所有的修改都已经提交到了暂存区,还没有commit,这个时候我们发现刚才的修改有错误,那么我们可以使用git reset HEAD file把暂存区的修改撤销掉,重新放回工作区:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   Hello.txt

You have new mail in /var/spool/mail/root
[root@node1 git-test]# git reset HEAD Hello.txt 
Unstaged changes after reset:
M   Hello.txt
[root@node1 git-test]# 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:   Hello.txt

no changes added to commit (use "git add" and/or "git commit -a")
[root@node1 git-test]#

我们将所有的修改都commit,这个时候如果发现错误,想回退到刚才提交之前的版本该怎么处理?
首先我们通过git log命令查看我们的提交历史:

6cfd50cb9f0edec3fc59dd59845b4c6e3b5ec22a git reset HEAD test
8d9eb9afd8c38821cc84ffe47fe2261386f48a4f aaa
6597abf6bb3617c2cbaad12cf1749d9771464ecd git mv test
2b1583efcc6e18d0f80946f88d416b140b01367a delete Hello.txt
9ccca93a00bd91a4883595b2f44a416ffb5ede9e mv test
3a2db18768b228b3af6fa878e36544d15e35cfa4 rm test finish
a80c6a946c0968edcbe3b9826629112b147a84e2 rm test
4794019de33bc2bfcea823ded27f80e98230e114 jump git add submit
b79795b531900217191da0db8b36ee220c074ad4 tree submit
a306d944c27e569f8003a82f7e251159cb61db33 second submit
5e874cc11b31065c65d4fd4ed7e6a275dca524d5 first submit
我们使用git reset –hard b7979回到第三次提交的版本:
[root@node1 git-test]# git reset --hard b79795
[root@node1 git-test]# git log --pretty=oneline
b79795b531900217191da0db8b36ee220c074ad4 tree submit
a306d944c27e569f8003a82f7e251159cb61db33 second submit
5e874cc11b31065c65d4fd4ed7e6a275dca524d5 first submit
[root@node1 git-test]# cat README 
My first git test project
first modify
second modify
three modify

我们可以使用git reset –hard commit-id返回指定的版本,但是返回后git log里面就只有当前提交之前的提交记录。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向当前的版本改为指向你要回退的版本,然后顺便把工作区的文件更新。
小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,使用git reset --hard commit-id回到指定的版本,不过前提是没有推送到远程库。

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

推荐阅读更多精彩内容

  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,587评论 1 17
  • 今天剽悍晨读分享书籍《聪明女人背小包》通过背小包让你的人生过的更好,更透视出人生的哲学。 哈哈!没忘记前天说过...
    剽悍的今天阅读 130评论 0 1
  • 昨天听伯凡日志录,理解了一个新的词汇——行为经济学,也叫怪诞行为学。是人的一种可以预见的非理性行为。 大家可以回忆...
    荷语微光阅读 784评论 0 1
  • 今夜不想入睡,想静静地守候,静静地看着时间的数字在变化,从此刻,一直到0:00。 以前一直觉得“守岁”就是除夕夜守...
    如伊老师阅读 217评论 0 1
  • 回到空中!在床的底下有个隐形的扫描仪,它可以检测你的健康,或者有什么敌人之类的。而那扫描仪可不是一般的扫描仪,当它...
    最爱金钱的丸子阅读 224评论 3 2