现状:我有一个已经在索引文件一个Git仓库。 我改动了几个文件,打开Git和这些文件添加到我的暂存区“混帐添加”。
问:如何删除从分段区的文件之一而不是从索引中移除或撤销更改文件本身?
现状:我有一个已经在索引文件一个Git仓库。 我改动了几个文件,打开Git和这些文件添加到我的暂存区“混帐添加”。
问:如何删除从分段区的文件之一而不是从索引中移除或撤销更改文件本身?
如果我理解正确的问题,您只是想“撤消” git add
这是该文件完成的。
如果您需要从暂存区域,删除一个文件
git reset HEAD -- <file>
如果你需要从临时区域中删除整个目录(文件夹),使用
git reset HEAD -- <directoryName>
您的修改将被保留。 当您运行git status
的文件将再次显示为修改但尚未上演。
见git reset
男子页的详细信息。
git rm --cached FILE
,
git rm -r --cached CVS */CVS
git reset <file>
作品你是否没有任何先前的提交。
因此,有轻微的调整,以添Henigan的回答是:你需要使用 - 文件名之前。 它是这样的:
git reset HEAD -- <file>
git reset filename.txt
如果你有一个FILENAME.TXT修改,您添加它错误地上演,你想从登台删除文件,但你不希望失去的变化。
如果你只是想删除的对文件的更改的一个子集,你可以使用:
git reset -p
要么
git reset -p <file_name>
此命令基本上相反git add -p
:它只会移除从临时区域所选择的变化。 我发现它在“unadding”的东西,我说错误是非常有用的。
如果要删除按照一定模式的文件和你正在使用git rm --cached
,您可以使用文件glob模式了。
见这里 。
你要:
影响到单个文件
从临时区域中删除文件
不会删除索引单个文件
不要撤消变化本身
解决的办法是
git reset HEAD file_name.ext
要么
git reset HEAD path/to/file/file_name.ext
当你这样做git status
,Git会告诉你如何unstage:
Changes to be committed: (use "git reset HEAD <file>..." to unstage).
所以git reset HEAD <file>
为我工作的变化是未触及。
如果你修改了许多被跟踪的文件,但只希望上演他们几个,做
git add .
并不总是有利的(或推荐) - 因为这阶段所有跟踪的文件(有些情况下,你想保留的改变只给自己,不想给他们舞台上的远程存储库)。
也不是理想的做了一堆
git add path/to/file1 path/to/file2
如果你有很多的嵌套的目录(这是大多数项目的情况下)的 - 很烦人
这时候,Git的图形用户界面是有帮助的(我用它可能只是时间)。 只需打开Git的图形用户界面,它显示了演出和不分级的文件部分。 选择从分级部分要unstage文件并按
Ctrl+U
(用于Windows)
到unstage他们。
我想你也许有混淆指数的概念,作为@CB贝利说:
临时区域的指数。
你可以简单地考虑临时目录和索引同样的事情。
所以,就像@Tim Henigan的答案 ,我想:
你只是想“撤消”
git add
这是该文件完成的。
下面是我的回答:
一般情况下,有两种方法可以撤消阶段的操作,如已经提到的其他答案:
git reset HEAD <file>
和
git rm --cached <file>
但是,有什么区别?
假设该文件已被演出和存在太多的工作目录中 ,使用git rm --cached <file>
如果您想从临时目录中删除,并保留在文件中工作目录 。 但是请注意,这种操作不仅会从临时目录中删除文件,而且文件标记为deleted
的临时目录 ,如果你使用
git status
此操作后,你会看到:
deleted: <file>
这是一个从临时目录删除文件的记录。 如果你不希望保留记录,只是单纯的想撤消文件的先前阶段的操作,使用git reset HEAD <file>
代替。
--------回答END --------
PS:我已经注意到提到了一些答案:
git checkout -- <file>
此命令的局面时,该文件已经上演 ,但该文件已在工作目录进行了修改它上演后,使用此操作来恢复文件从临时目录 工作目录 。 换句话说,在这个操作之后,变化发生在你的工作目录 ,而不是你的临时目录 。
你需要在文件的目录,然后键入以下到终端
git reset HEAD .
假设您需要重置只有一个文件。
要一次unstage一切,运行此命令
git reset HEAD -- .
git checkout -- <file>
它完美地从临时区域中删除文件
以我为例,我做
git checkout -- FILE