git 修改撤销

用github这么久一些基本的东西还是搞不清,今天终于google了一波研究了一下

首先要搞懂4个概念:工作区、暂存区、本地版本库、远程版本库

为了表意清晰一点,就只画正向的关系啦~关系图如下

【其实说白点,工作区,就是本地ide或者记事本里正码着的代码】

想丢弃工作区里修改的文件(在执行add之前)

直接git checkout -- <file>
执行完这步操作,工作区的指定文件就会被版本库里的最新版本覆盖~
可以执行git checkout .丢弃工作区的所有文件(注意checkout和 . 之间有个空格)
不过这个操作威力很大哦~要谨慎

想丢弃暂存区的文件

这里的丢弃其实有点歧义啦,一种是撤销对该文件的add,但工作区仍然保留;一种是既撤销add,工作区也丢弃

先说第一种:
执行git reset HEAD <file> 即可
此时可以用git status检查一下状态,会发现有文件名为红色的提示,说该文件not staged(就是没添加到暂存区)

1
2
3
4
5
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: cat/cat.html

可以看到终端还会暖心的提醒你有两种操作,第二种checkout就是前面2.提到的,也是这一点的第二种情况——既撤销add,工作区也丢弃~
就是先执行git reset HEAD <file>,再执行git checkout -- <file>
就可以把已经添加到暂存区的文件,彻底的从工作区也丢弃了。

如果commit了文件A和文件B,但是发现A不应该commit。。。

这种,,我目前还不知道有什么好方法,,能撤销A的同时还保留B的修改。。。
只能手动copy一份B的代码,然后版本回退$ git reset --hard HEAD^ ,再把刚备份的B粘贴过来,再只commit一下B。。。
所以为了避免这种尴尬的情况,记得写一点就commit一下!养成好习惯~~~


参考文章:(本文版本回退只是提了一嘴~更详细的信息可以戳下面~ ^ ^)
廖大大的《撤销修改》
廖大大的《版本回退》
git官网文档

觉得有帮助到你的话,欢迎打赏~~