[toc]
chapter(四)
4.1 如何撤销修改?
git checkout -- file可以丢弃工作区的修改
什么意思呢? 比如说你写错了一行代码或者写错了一句话,我要把它删掉。这是就可以撤销修改了、 让我们实际操作一遍,这样更容易让人理解:
在README.txt
中写下这句话:Summer is comming!
toto@pc:~/code/testGit$ vim README.txt
toto@pc:~/code/testGit$ cat README.txt
This document is a description!
The name is README.txt!
Summer is comming!
看到这句话我发现不对,要撤销!先git status
下
toto@pc:~/code/testGit$ 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")
可以发现README.txt
显示被修改,是在工作区。
而且啊,Git
已经很人性的告诉我们,可以使用git checkout -- <file>...
,把其在工作区撤销掉。
那就用git checkout -- <file>...
试下:
toto@pc:~/code/testGit$ git checkout -- README.txt
toto@pc:~/code/testGit$ git status
On branch master
nothing to commit, working tree clean
toto@pc:~/code/testGit$ cat README.txt
This document is a description!
The name is README.txt!
看到没,刚才修改的那个文档已经被撤销了。
有了撤销修改的概念,我们就要分情况了!
- 刚刚尝试的是修改的文档还在工作区,并未
git add
给暂存区 - 文档已经被
git add
给暂存区 - 文档已经被
git commit
给master
4.2 撤销修改情况2
撤销修改情况2是指:文档已经被git add
给暂存区
实践出真理。我们直接试试:
toto@pc:~/code/testGit$ vim README.txt
toto@pc:~/code/testGit$ cat README.txt
This document is a description!
The name is README.txt!
The Winter is comming!
toto@pc:~/code/testGit$ git add README.txt
toto@pc:~/code/testGit$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.txt
我先是vim README.txt
在其中添加了一行:The Winter is comming!
然后,将其git add
进暂存区
最后,获取了一下状态:git status
可以发现,Git
又已经很贴心的告诉我: 用命令git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),然后放回工作区。
之前在chapter(二)中的版本回退中,我们已经使用过命令git reset HEAD <file>
了。
在这里可以把修改的文档从暂存区退回到工作区
toto@pc:~/code/testGit$ git reset HEAD README.txt
Unstaged changes after reset:
M README.txt
toto@pc:~/code/testGit$ 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")
toto@pc:~/code/testGit$ cat README.txt
This document is a description!
The name is README.txt!
The Winter is comming!
仔细看上面的代码展示,就会发现在使用命令git reset HEAD README.txt
后,Git提示我们已经将该文件回退到工作区了。
如果我们先把The Winter is comming!
这句话撤销掉,那再次执行一下4.1节介绍的内容。
即:使用命令:git checkout -- <file>
4.3 撤销修改情况3
撤销修改情况3是指:文档已经被git commit
从暂缓区提交给master
这种情况的操作就很简单了:直接使用chapter(二)中的版本回退,即可! 这个前提是:你不能把本地仓库推送到远程仓库
4.4 总结
若在工作区想撤销,可用命令:git checkout -- <file>
将修改文档从工作区撤销;
若在暂存区想撤销,可用命令:git reset HEAD <file>
将修改文档从暂存区撤销到工作区;
若在master中想撤销,可用命令:git reset HEAD <file>
将修改文档退回到上一版本。