Git详细教程(六)撤销修改

2018-01-14  本文已影响0人  无关风月oo

假设场景一:

你修改了readme.txt文件,但是过一会儿想到修改的信息有误,或者不想修改了。那么此时怎么办呢?当然因为你已经:wq!了,所以别想着command + z来撤销。

例如我先在新的readme.txt文件中新增一行:

$ cat readme.txt 
无关风月oo
 
$ cat readme.txt 
无关风月oo     //此处为原有内容,已commit;
场景一的撤销修改测试   //此处为新增内容;

先来查看一下状态,readme.txt的状态:

$ 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:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a") 

其实我们可以看到git有提示我们git checkout -- file命令撤销对工作区中的改变;

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的改变(增删改)全部撤销,这里有两种情况:

$ git checkout -- readme.txt 

再来看看readme.txt文件的内容呢:

$ cat readme.txt 
无关风月oo

另外需要注意:git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

假设场景二:

你修改了文件,并且使用git add命令将文件提交到了暂存区。你又后悔了!怎么做呢?

我们先来修改提交一下:

cat readme.txt 
无关风月oo
场景二的撤销修改测试

$ git add readme.txt 

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

    modified:   readme.txt

注意(论英文的重要性),git又提示我们,使用git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:

$ git reset HEAD readme.txt 
Unstaged changes after reset:
M   readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

再用git status查看一下,现在暂存区是干净的,工作区有修改:

$ 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:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

再次强调,这里只是把修改由暂存区回退到工作区,工作区的还没恢复呢:

$ cat readme.txt 
无关风月oo
场景二的撤销修改测试

我们前面学了如何将工作区的修改撤销掉不是吗,那么问题又解决了。

$ git checkout -- readme.txt 
$ cat readme.txt 
无关风月oo

是不是好玩又简单。

假设场景三

你修改了内容,不但git add到了暂存区,还熟练使用了git commit -m "xxx"。你慌了吧!

但是,git还是有办法帮助你。还记得之前学习过的Git详细教程(二)版本回退吗?不过这是有条件地,就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦你把修改的提交推送到远程版本库,你就真的惨了……

总结

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考Git详细教程(二)版本回退,不过前提是没有推送到远程库。

上一篇 下一篇

猜你喜欢

热点阅读