2016-12-12 git 修改撤销

103 阅读2分钟

(自己的老博客搬运)createdAt:- createAt: 2016-12-12 23:38:42


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

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

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

git_4_things.png

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

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

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

想丢弃暂存区的文件

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

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

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一下!养成好习惯~~~


参考文章:(本文版本回退只是提了一嘴~更详细的信息可以戳下面~~ ^ ^)