基础知识

我们知道Git有三大区(工作区、暂存区、版本库)以及几个状态(untracked、unstaged、uncommited),下面只是简述下Git的大概工作流程。
  (1)打开你的项目文件夹,除了隐藏的 .git 文件夹,其他项目文件位于的地方便是工作区,工作区的文件需要添加到 Git 的暂存区(git add),随后再提交到 Git 的版本库(git commit)。
  (2)首次新建的文件都是 untracked 状态(未跟踪),此时需要 git add 到暂存区,Git 便会在暂存区中生成一个该文件的索引,文件此时处于 uncommited 状态,需要 git commit 生成版本库。添加到了版本库之后,再对文件进行修改,那么文件的状态会变为 unstaged 状态。
简单的认识了 Git 的工作流程,接下来便可以看看如何删除错误添加到暂存区或版本库里的文件了!

删除错误添加到暂存区的文件

有时你在工作区新建了文件 TestFile ,并且已经将它添加到了暂存区,git 会告知,现有有一个文件未提交到版本库,如下图:

请输入图片描述
请输入图片描述

https://images2015.cnblogs.com/blog/695731/201510/695731-20151017163046179-733384065.png

仅仅删除暂存区里的文件

此时你想撤销错误添加到暂存区里的文件,可以输入以下命令:

git rm --cache 文件名

请输入图片描述
请输入图片描述

https://images2015.cnblogs.com/blog/695731/201510/695731-20151017163046585-1901800919.png

上面的命令仅仅删除暂存区的文件而已,不会影响工作区的文件,如上图,TestFile.txt 仍然存在,此时输入下面命令,git会告知有一个未跟踪的文件 TestFile.txt。

git status

删除暂存区和工作区的文件

git rm -f 文件名

工作区的文件也被删除了。

请输入图片描述
请输入图片描述

https://images2015.cnblogs.com/blog/695731/201510/695731-20151017163046819-1768695722.png

删除错误提交的commit

有时,不仅添加到了暂存区,而且commit到了版本库,这个时候就不能使用git rm了,需要使用git reset命令。
错误提交到了版本库,此时无论工作区、暂存区,还是版本库,这三者的内容都是一样的,所以在这种情况下,只是删除了工作区和暂存区的文件,下一次用该版本库回滚那个误添加的文件还会重新生成。
这个时候,我们必须撤销版本库的修改才能解决问题!
git reset有三个选项,--hard、--mixed、--soft。

//仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
git reset --soft 版本库ID
//仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
git reset --mixed 版本库ID
//彻底将工作区、暂存区和版本库记录恢复到指定的版本库
git reset --hard 版本库ID

那我们到底应该用哪个选项好呢?

(1)如果你是在提交了后,对工作区的代码做了修改,并且想保留这些修改,那么可以使用git reset --mixed 版本库ID,注意这个版本库ID应该不是你刚刚提交的版本库ID,而是刚刚提交版本库的上一个版本库。如下图:
(2)如果不想保留这些修改,可以直接使用彻底的恢复命令,git reset --hard 版本库ID。
(3)为什么不使用--soft呢,因为它只是恢复了版本库,暂存区仍然存在你错误提交的文件索引,还需要进一步使用上一节的删除错误添加到暂存区的文件,详细见上文。

请输入图片描述
请输入图片描述

https://images2015.cnblogs.com/blog/695731/201510/695731-20151017164205272-1808101337.png

转自:【原创】Git删除暂存区或版本库中的文件