Git教程:Git版本操作之撤销修改(二)

撤销修改

前一篇博客介绍了版本回退,回退到已经提交的版本。

但是,这里的修改和上一篇的回退概念不一样,修改要分两种情况讨论:

1、只是在工作区(目录)进行了修改,还没有提交至暂存区(也就是要丢弃工作区的
	                                                              修改)。
	
2、在工作进行了修改,并且已经提交至暂存区。

下面我们分别讨论这两种情况如何撤销修改:

1、针对第一种情况很好处理:

比如我们在readme.txt后加了一行I dont like Git:

$ cat readme.txt
git is a version control tool
git is the most advaced version control system
i learn git now
i think git is better than SVN
i dont like git

这个时候你突然觉得不对,即使不喜欢也不能说出来啊,于是立刻想纠正它。

于是用 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")

发现我们只是在工作区更改了 readme.txt 文件,还没有 add 或者 commit,Git提示我们可以使用git checkout --<file>-- 命令放弃在工作区进行的修改:于是乎,有了下面的一行代码:

$ git checkout -- readme.txt        //注意:--与文件名之间有空格

此时再来查看readme.txt 内容:

cat readme.txt
git is a version control tool
git is the most advaced version control system
i learn git now
i think git is better than SVN
解惑:此时可能就会有小伙伴们问:为什么要使用git checkout 命令,
我直接打开readme.txt 手动删掉最后一行不就行了嘛,当然可以。

但是,我们这里只是对一个文件增加了一行,相当于修改了某一处的某一个功能,如果你
在写代码的时候一次性修改(或者添加很多行),你自己都不记得自己改了哪里,怎样
手动恢复呢?而且你手动删除之后还必须要 add 以及 commit 之后版本库中的版本才是
最新版本。

所以使用 git checkout 就解决了你很大的问题

在这里插入图片描述


2、已经提交至暂存区怎么办?

Please 记住:Git总是有办法的 !

假如现在已经是晚上九点了,而你还在公司摸鱼,996也该下班了不是,此时心里极其不爽,于是你在readme.txt 文档下写下:cccccccccccccc:还不小心添加到了暂存区:

$ cat readme.txt
gait is a version control tool
git is the most advaced version control system
i learn git now
i think git is better than SVN
cccccccccc

$ git add readme.txt

突然灵光乍现,你意识到这个问题,顿时心里一万个草泥马飘过,但是你应该庆幸的是还没有commit ,于是你使用git status 查看一下当前的状态:

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

Git 告诉我们等待着提交(changed to be committed),但是也同时提示你使用命令 git reset HEAD <file>... 可以撤销掉缓存区的修改。于是乎,又是一顿操作:

$ git reset HEAD readme.txt	
Unstaged changes after reset:
M	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")

这个时候提示我们没有文件等待着提交( Changes not staged for commit:) , 只是在工作区进行了修改,于是这就回到了第一种情况,还记得上面是什么命令吗?对,git checkout -- <file>(丢弃工作区的修改)

于是赶紧操作起来:

$ git checkout -- readme.txt

然后查看当前的状态:

$ git status
On branch master
nothing to commit, working tree clean

现在,终于结束了!这就是为自己的行为付出的代价,所以工作和生活上还是要谨言慎行!

在这里插入图片描述
小结:

本节课主要讲解了如何撤销修改的操作,分为两种情况:

1、只是在工作区(目录)进行了修改,还没有提交至暂存区(丢弃工作区的修改)git checkout -- <file>

2、在工作进行了修改,并且已经提交至暂存区,分为两步撤销:1)把在暂存区的内容回退到工作区git reset HEAD <file >;2)丢弃工作区的修改:git checkout -- <file>




参考:
【1】廖雪峰Git教程

【2】Git撤销修改和删除文件

发布了33 篇原创文章 · 获赞 23 · 访问量 2268

猜你喜欢

转载自blog.csdn.net/weixin_42119041/article/details/103366304