暂时从git取消跟踪文件


449

我在机器上设置了本地git。初始化git时,我添加了预编译的库和二进制文件。但是,现在在开发过程中,我不想间歇性地检入那些文件。我不想从仓库中删除这些文件。在我完成开发之前,是否有任何方法可以不跟踪这些文件。(我认为我不能使用.gitignore,因为它仅适用于不在git中的那些文件。我想暂时禁用文件跟踪。)



Answers:


723

git update-index应该做你想要的

这将告诉git您要开始忽略对文件的更改
git update-index --assume-unchanged path/to/file

当您想重新开始追踪时
git update-index --no-assume-unchanged path/to/file

Github文档:update-index


3
最后,一个实际上对我不小心提交的dev文件有效的命令,谢谢:)
Richard de Wit 2014年

15
为什么不git rm -r --cached <file>?
Ehsan

23
@Ehsan似乎git rm --cached会导致在其他机器上的下一个请求中检出同一分支的其他机器上的本地副本删除。参见arlocarreon.com/blog/git/…,尤其是下面的讨论。
麻省理工学院

3
对我不起作用,当我更改文件时,它仍被添加到包含的更改中。我可以排除,但有时可能会不小心将其添加。
MrFox

8
假设不变并不是为了这个目的。可能想阅读此主题
Appy

264

您可以在以后保持文件未跟踪

git rm -r --cached <file>

使用添加文件

git add -u

他们推动或做你想做的任何事情。


19
根据以下内容,这实际上是正确的答案:git-scm.com/book/en/v2/…–
Ehsan

git rm --cached .DS_Store 然后打印rm '../.DS_Store'并删除本地文件?(git version 2.6.4 (Apple Git-63)
曾为时


4
这不是正确的答案,因为这将删除源文件。在OP想忽略该文件的本地修改,无法删除它完全跟踪
cjsimon

2
警告:它也会删除您要取消跟踪的文件。解决方案是将所有文件复制到某个位置,并在提交后将它们复制回去。
psad

111
git rm --cached

但是,您不应该首先提交已编译的二进制文件和外部依赖项。使用类似Bundler的工具将其拉入。


2
不要忘记目录的-r选项(递归):git rm -r --cached
Anatoliy Shuba 2015年


7

git书在第2.4节“做事”中提到了这一点。基本上,您要做的就是将某些文件的索引状态重置为HEAD状态,即最新签出(或提交)的状态。撤消将文件暂存到当前索引。该任务的命令是git reset。[1]。

因此,您必须执行的命令是:

git reset HEAD /path/to/file

git的较新版本(我相信从1.6左右开始)在执行时会将此命令(还有更多)作为提示git status。这些版本非常用户友好。个人提示:如果您仅暂存几个文件,请使用git add -i。这将启动交互式登台工具,使事情变得特别容易。另外,我强烈建议您阅读本书,因为这在实际情况中非常明确地介绍了git的用法。

[1] http://www.git-scm.com/book


我同意这git reset [file]是取消登台文件的最直接方法。
频谱2014年

18
撤消和取消跟踪是不同的事情
Jaime Sangcap 2015年

6

不是原始问题的答案。但这可能会帮助某人。

要查看您所做的更改(知道哪些文件被标记为--assume-unchanged

git ls-files -v

结果文件列表的前缀将带有一个字符(例如:H或h),如果是小写字母(即h),则文件标记为--assume-unchanged


5

我假设你是问如何删除所有这些文件在build文件夹或bin文件夹,而不是分别选择每个文件。

您可以使用以下命令:

git rm -r -f /build\*

确保您位于构建目录的父目录中。
该命令将递归地“删除” bin /或build /文件夹中的所有文件。用删除一词表示git将假装那些文件被“删除”并且不会跟踪那些文件。git确实将这些文件标记为处于删除模式。

确保确保您的.gitignore准备好即将进行的提交。
文档:git rm


1

git reset [文件]

将文件从暂存区返回到工作目录

我经常忘记将节点模块添加到.gitignore文件中,这解决了该问题。



1

删除所有取消跟踪文件。试试这个终端命令

 git clean -fdx

它将从磁盘而不是从git历史记录中删除文件。
莱昂纳多

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.