学习目的
- 当你在工作区修改了,但是你不想要修改的部分时,如何撤销?
- 当你将工作区的修改添加到暂存区,如何撤销?
- 当你将修改提交到分支,如何撤销?
撤销工作区修改
- 修改前
$ git diff
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
添加一行测试工作区、暂存区、分支。
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
再次测试git diff对比工作区和版本库最新版本的区别。
- 修改后
$ git diff
diff --git a/readme.txt b/readme.txt
index 1149d4c..3bbbb47 100644
--- a/readme.txt
+++ b/readme.txt
@@ -6,4 +6,5 @@ Git is free software.
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
-再次测试git diff对比工作区和版本库最新版本的区别。
No newline at end of file
+再次测试git diff对比工作区和版本库最新版本的区别。
+测试撤销修改。
No newline at end of file
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
添加一行测试工作区、暂存区、分支。
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
再次测试git diff对比工作区和版本库最新版本的区别。
测试撤销修改。
- 查看修改后工作区的状态
$ 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
命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
现在,看看readme.txt的文件内容:
$ git diff
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
添加一行测试工作区、暂存区、分支。
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
再次测试git diff对比工作区和版本库最新版本的区别。
可以看出工作区的文件已经回到修改之前的版本!
注意:git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
撤销暂存区修改
- 修改前
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
添加一行测试工作区、暂存区、分支。
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
再次测试git diff对比工作区和版本库最新版本的区别。
- 修改后并添加到暂存区
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
添加一行测试工作区、暂存区、分支。
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
再次测试git diff对比工作区和版本库最新版本的区别。
修改添加到暂存区测试撤销!
$ git add readme.txt
2.1 查看状态
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
Git同样告诉我们,用命令git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
2.2 再次查看状态
$ 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
$ git status
On branch master
nothing to commit, working tree clean
- 撤销后
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
添加一行测试工作区、暂存区、分支。
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
再次测试git diff对比工作区和版本库最新版本的区别。
撤销分支修改
如果修改了,并且提交到分支了,想要撤销,参考GIT学习----第三节:版本回退。
- 修改前
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
添加一行测试工作区、暂存区、分支。
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
再次测试git diff对比工作区和版本库最新版本的区别。
- 修改后并提交到分支
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
添加一行测试工作区、暂存区、分支。
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
再次测试git diff对比工作区和版本库最新版本的区别。
修改提交到分支测试!
$ git add readme.txt
$ git commit -m "提交到分支的修改进行撤销提交"
[master 076ec5c] 提交到分支的修改进行撤销提交
1 file changed, 2 insertions(+), 1 deletion(-)
- 撤销到上个版本
$ git reset --hard HEAD^
HEAD is now at ffb306a 再次测试git diff提交测试
- 撤销后查看工作区内容
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software.
添加一行测试工作区、暂存区、分支。
cat 命令测试。
测试修改文件后各区状态!
测试git diff,查看工作区和分支文件的修改情况!
再次测试git diff对比工作区和版本库最新版本的区别。
发现的确被撤销了!世界完美了!
小结
- 工作区撤销修改:git checkout – file.
- 暂存区撤销修改:(1)git reset HEAD ;(2)git checkout – file.
- 分支撤销修改:git reset --hard HEAD^.
- 特别注意此处撤销,是没有推送到远程版本库的撤销!没有推送到远程版本库的撤销!没有推送到远程版本库的撤销!重要的事说三遍!
其他
QQ交流群: 264303060