(自己的老博客搬运)createdAt:- createAt: 2016-12-12 23:38:42
用github这么久一些基本的东西还是搞不清,今天终于google了一波研究了一下
首先要搞懂4个概念:工作区、暂存区、本地版本库、远程版本库
为了表意清晰一点,就只画正向的关系啦~关系图如下
【其实说白点,工作区,就是本地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一下!养成好习惯~~~
参考文章:(本文版本回退只是提了一嘴~更详细的信息可以戳下面~~ ^ ^)