美文网首页
Git详细教程(六)撤销修改

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

作者: 无关风月oo | 来源:发表于2018-01-14 01:14 被阅读0次

假设场景一:

你修改了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文件在工作区的改变(增删改)全部撤销,这里有两种情况:

  • 1.对修改后未git add的文件撤销修改,恢复到与当前版本库一样的状态;
  • 2.对``git add```到暂存区后又再次修改过的文件撤销修改,此时会恢复到刚加进暂存区到状态;
$ 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详细教程(二)版本回退,不过前提是没有推送到远程库。

相关文章

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

    假设场景一: 你修改了readme.txt文件,但是过一会儿想到修改的信息有误,或者不想修改了。那么此时怎么办呢?...

  • git 命令

    删除分支命令git分支教程git-flow说明 Git撤销git commit 但是未git push的修改 找到...

  • 1223

    git 撤销和删除 撤销工作区的修改:撤销某个文件的工作区修改:git checkout [--] filepat...

  • 撤销修改

    撤销修改, 是便于出现文件修改错误后,撤销当前修改。使用git checkout 撤销工作区的修改;...

  • Git版本回退

    git 撤销commit 撤销修改http://www.trinea.cn/dev-tools/git-skill/

  • Git分支管理策略

    如果你已经看完了Git详细教程(一)Git详细教程(二)Git详细教程(三)三篇简单的Git教程,相信你对Git有...

  • git各场景下的撤销

    1、撤销工作区的修改(未执行 git add .) git checkout 文件或目录 2、撤销暂存区的修改(已...

  • git 相关

    目录 git SSH配置 git 分支名修改 git 放弃本地修改 强制拉取更新 git 撤销commit git...

  • Git操作速查

    舍弃本地修改 git 撤销,放弃本地修改 未add时git checkout . add后,commit前git ...

  • 常用的git命令

    常用Git命令 切换分支:git checkout name 撤销修改:git checkout -- file ...

网友评论

      本文标题:Git详细教程(六)撤销修改

      本文链接:https://www.haomeiwen.com/subject/hanhoxtx.html