GIT学习----第六节:撤销修改

学习目的

  1. 当你在工作区修改了,但是你不想要修改的部分时,如何撤销?
  2. 当你将工作区的修改添加到暂存区,如何撤销?
  3. 当你将修改提交到分支,如何撤销?

撤销工作区修改

  1. 修改前
$ 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对比工作区和版本库最新版本的区别。
  1. 修改后
$ 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对比工作区和版本库最新版本的区别。
测试撤销修改。
  1. 查看修改后工作区的状态
$ 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命令。

撤销暂存区修改

  1. 修改前
$ 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对比工作区和版本库最新版本的区别。
  1. 修改后并添加到暂存区
$ 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
  1. 撤销后
$ 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学习----第三节:版本回退

  1. 修改前
$ 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对比工作区和版本库最新版本的区别。
  1. 修改后并提交到分支
$ 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(-)
  1. 撤销到上个版本
$ git reset --hard HEAD^
HEAD is now at ffb306a 再次测试git diff提交测试
  1. 撤销后查看工作区内容
$ 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对比工作区和版本库最新版本的区别。

发现的确被撤销了!世界完美了!

小结

  1. 工作区撤销修改:git checkout – file.
  2. 暂存区撤销修改:(1)git reset HEAD ;(2)git checkout – file.
  3. 分支撤销修改:git reset --hard HEAD^.
  4. 特别注意此处撤销,是没有推送到远程版本库的撤销!没有推送到远程版本库的撤销!没有推送到远程版本库的撤销!重要的事说三遍!

其他

QQ交流群: 264303060

QQ交流群

我的博客,欢迎交流!

我的CSDN博客,欢迎交流!

微信小程序专栏

前端笔记专栏

微信小程序实现部分高德地图功能的DEMO下载

微信小程序实现MUI的部分效果的DEMO下载

微信小程序实现MUI的GIT项目地址

微信小程序实例列表

前端笔记列表

游戏列表

posted @ 2018-09-29 15:46  Newman·Li  阅读(207)  评论(0编辑  收藏  举报