暂时从git中取消文件

age*_*ith 425 git github repository

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

And*_*ndy 679

git update-index应该做你想要的

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

当你想再次开始追踪时
git update-index --no-assume-unchanged path/to/file

Github文档:update-index

  • @Ehsan似乎`git rm --cached`将导致删除其他机器上的本地副本,其中下一次拉出时检出相同的分支.请参阅http://www.arlocarreon.com/blog/git/untrack-files-in-git-repos-without-deleting-them/,特别是下面的讨论. (21认同)
  • 为什么不git rm -r --cached <file>? (15认同)
  • 假设不变不是为了这个目的.可能想读这[线程](http://stackoverflow.com/questions/23097368/git-ignore-vs-exclude-vs-assume-unchanged) (7认同)
  • 最后一个命令实际上适用于我意外提交的dev文件,谢谢:) (3认同)
  • 不适合我,当我对文件进行更改时,它仍然添加到包含的更改中.我可以排除,但在某些时候它可能会被意外添加. (3认同)

caj*_*uuh 240

你可以保持你的文件没有跟踪

git rm -r --cached <file>
Run Code Online (Sandbox Code Playgroud)

添加你的文件

git add -u
Run Code Online (Sandbox Code Playgroud)

他们推或做任何你想做的事.

  • 这实际上是正确答案依据:https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository (19认同)
  • 这不是正确的答案,因为这将删除源中的文件。OP 希望忽略该文件的本地更改,而不是完全删除对其的跟踪 (7认同)
  • 警告:它也会删除您想要取消跟踪的文件。解决方案是将所有文件复制到某处,并在提交后将它们复制回来。 (4认同)

Tek*_*kub 107

git rm --cached
Run Code Online (Sandbox Code Playgroud)

但是,您不应该首先提交已编译的二进制文件和外部依赖项.使用像Bundler这样的工具来取代它们.

  • 不要忘记目录的-r选项(递归):git rm -r --cached (2认同)

小智 29

使用以下命令来取消跟踪文件

git rm --cached <file path>
Run Code Online (Sandbox Code Playgroud)


Eri*_*een 7

git-book在第2.4节"撤消事物"中提到了这一点.基本上,您需要做的是将某些文件的索引状态重置为HEAD状态,即最新结账(或提交)的状态.这会将文件暂存到当前索引.该任务的命令是git reset.[1]

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

git reset HEAD /path/to/file
Run Code Online (Sandbox Code Playgroud)

较新版本的git(我相信自1.6左右)在执行时会给出这个命令(以及更多)作为提示git status.这些版本非常人性化.个人提示:如果您只是暂存一些文件,请使用git add -i.这将启动交互式临时工具,这使得事情变得特别容易.此外,我强烈建议您阅读本书,因为在实际情况中使用git非常明确.

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

  • 撤消和取消跟踪是不同的事情 (18认同)

pri*_*ime 6

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

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

git ls-files -v
Run Code Online (Sandbox Code Playgroud)

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

  • 所以使用`git ls-files -v | grep "^h "` 仅查看 `--assume-unchanged` 的内容。 (2认同)

Vra*_*dya 5

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

您可以使用此命令:

git rm -r -f /build\*

确保您位于构建目录的父目录中.
此命令将以递归方式"删除"bin /或build /文件夹中的所有文件.通过单词delete我的意思是git将假装这些文件被"删除"并且不会跟踪这些文件.git确实标记了这些文件处于删除模式.

确保你的.gitignore准备好即将到来的提交.
文档:git rm


归档时间:

查看次数:

386397 次

最近记录:

5 年,11 月 前