暂时取消从git跟踪文件
我已经在我的机器上安装了本地git。当我初始化git时,我添加了预编译的lib和二进制文件。然而,现在在我的开发过程中,我不想断断续续地签入这些文件。我不想从repo中删除这些文件。有没有办法在我完成开发之前不跟踪这些文件。(我想我不能使用.gitignore,因为它只适用于那些不在git中的文件。我想暂时禁用文件跟踪。)应该做你想做的事 这将告诉git您希望开始忽略对文件的更改暂时取消从git跟踪文件,git,github,repository,Git,Github,Repository,我已经在我的机器上安装了本地git。当我初始化git时,我添加了预编译的lib和二进制文件。然而,现在在我的开发过程中,我不想断断续续地签入这些文件。我不想从repo中删除这些文件。有没有办法在我完成开发之前不跟踪这些文件。(我想我不能使用.gitignore,因为它只适用于那些不在git中的文件。我想暂时禁用文件跟踪。)应该做你想做的事 这将告诉git您希望开始忽略对文件的更改 git更新索引--假定路径/到/文件未更改 当您想重新开始跟踪时 git更新索引——不假设路径/到/文件未更改 但
git更新索引--假定路径/到/文件未更改
当您想重新开始跟踪时git更新索引——不假设路径/到/文件未更改
但是,首先不应该提交已编译的二进制文件和外部依赖项。使用Bundler之类的工具将它们拉进来。git手册在第2.4节“撤销东西”中提到了这一点。基本上,您需要做的是将某些文件的索引状态重置回HEAD状态,即最新签出(或提交)的状态。这将撤消将文件转移到当前索引的操作。此任务的命令是git reset
[1]
因此,您必须执行的命令是:
git reset HEAD /path/to/file
在执行git status
时,较新版本的git(我相信是从1.6左右开始)给出了这个命令(以及更多)作为提示。这些版本非常用户友好。个人提示:如果您只准备了几个文件,请使用git add-i
。这将启动交互式登台工具,使事情变得特别简单。另外,我强烈推荐阅读这本书,因为它非常明确地介绍了git在实际情况中的使用
[1] 我假设您正在询问如何删除生成文件夹或bin文件夹中的所有文件,而不是分别选择每个文件
您可以使用以下命令:
git rm-r-f/build\*
确保您位于生成目录的父目录中。
此命令将递归地“删除”bin/或build/文件夹中的所有文件。“删除”这个词的意思是git会假装那些文件被“删除”,而这些文件不会被跟踪。git确实将这些文件标记为处于删除模式
请确保您的.gitignore已准备好进行即将进行的提交。
之后,您可以不跟踪您的文件
git rm -r --cached <file>
他们推或做你想做的任何事。不是对原始问题的回答。但这可能会帮助一些人
要查看您所做的更改(知道哪些文件被标记为--assessment unchanged)
结果文件列表将有一个带有一个字符的前缀(例如:H或H)
如果是小写字母(即h),则该文件已标记-假定未更改使用以下命令取消跟踪文件
git ls-files -v
git rm --cached <file path>
git-rm——缓存
删除所有未跟踪的文件。试试这个终端命令
git clean -fdx
假设未更改
的替代方法是跳过工作树
。后者有着不同的含义,比如“Git不应该跟踪这个文件。开发人员可以并且被鼓励进行本地更改。”
在您不希望跟踪生成文件(通常较大)的更改的情况下,假设unchanged
是一个不错的选择
如果文件应该具有默认内容,并且开发人员可以在本地自由修改文件,但不应将其本地更改检查回远程repo,skip worktree
是更好的选择
另一个优雅的选择是在repo中有一个默认文件。假设文件名为BuildConfig.Default.cfg
。开发人员希望在本地将其重命名为BuildConfig.cfg
,并且他们可以根据需要进行任何本地更改。现在将BuildConfig.cfg
添加到.gitignore
中,这样文件就不会被跟踪
看看哪个在接受的答案中有一些好的背景信息。最后一个命令的相关可能重复,该命令实际上适用于我意外提交的开发文件,谢谢:)为什么不使用git rm-r--cached?@Ehsan似乎git rm--cached
会导致删除其他机器上的本地副本,在下一次拉动时,检查同一分支的位置。请参阅,尤其是下面的讨论。不适用于我,当我对文件进行更改时,它仍然会添加到包含的更改中。我可以排除,但在某个时候,它可能会意外地被添加进来。假定-unchanged不是用于此目的的。可能想读一下这篇文章,我同意git reset[file]
是解压文件最简单的方法。解压和解压是不同的事情Dont forget-r选项(递归)对于目录:git-rm-r--cached这实际上是正确的答案,根据:git-rm--cached.DS\u Store
然后它打印rm'../.DS\u Store'
,本地文件被删除??!(git版本2.6.4(Apple git-63)
)在这里得到了答案这不是正确的答案,因为这将删除源代码中的文件。OP希望忽略该文件的本地更改,而不是删除对该文件的跟踪。警告:它还将删除您希望取消跟踪的文件。解决方案是将所有文件复制到某个位置,并在提交后将其复制回。这将从磁盘中而不是从git历史记录中删除文件。因此,使用git ls files-v|grep“^h”
只查看——假定未更改的文件。如果您需要对Windows更友好的内容:powershell“git ls files-v|?{$\uCmatch'^h}
应该这样做。
git rm --cached <file path>
git clean -fdx