忽略git中修改(但未提交)的文件?

Posted

技术标签:

【中文标题】忽略git中修改(但未提交)的文件?【英文标题】:Ignore modified (but not committed) files in git? 【发布时间】:2010-10-13 21:42:27 【问题描述】:

我可以告诉 git 忽略已修改(删除)但不应提交的文件吗?

情况是我在 repo 中有一个子目录,其中包含我根本不感兴趣的东西,所以我删除了它以防止它出现在自动完成等(在 IDE 中)。

但是现在,如果我将该文件夹添加到 .gitignore,则根本没有任何变化,所有内容都显示为 git status 已删除。

有没有办法让 git 忽略它?

(或者,当我使用 git-svn 时,我可以将更改提交到本地 git 并确保它们不会传递到 svn repo 吗?)

【问题讨论】:

而不是仅仅在回购索引中将它们标记为未修改,您可能希望将它们从索引中完全删除。因此,虽然您的工作目录中仍然有该文件,但可以完全删除 repo 索引,而 git 甚至根本不会认为它已经存在。请参阅下面我的答案中的链接。 【参考方案1】:

查看git-update-index man page 和 --assume-unchanged 位及相关信息。

当我遇到你的问题时,我会这样做

git update-index --assume-unchanged dir-im-removing/

或特定文件

git update-index --assume-unchanged config/database.yml

【讨论】:

你能以某种方式列出所有被忽略的文件吗? 您可以通过git update-index --no-assume-unchanged config/database.yml取回文件 请参阅下面 Dave L 的答案以获得更新的解决方案,而不会出现 --assume-unchanged 的一些缺点。 是否可以将其添加到存储库配置文件中,而不是每次都手动运行此命令? 下次提交是否会显示为已修改?我不希望它被假定永远不变。【参考方案2】:

一个更新更好的选择是 git update-index --skip-worktree 在硬重置或拉取的新更改时不会丢失。

请参阅man page。

还有http://fallengamer.livejournal.com/93321.html的比较

【讨论】:

需要注意的一个缺点是,一旦文件的修改被skip-worktree 隐藏,查找这些文件有点麻烦。我知道的唯一方法是git ls-files -v |grep -v '^H'。此外,许多 GUI 工具不了解此功能,并且可能会产生有趣的错误,例如checkout 因“隐藏”修改文件而失败。 我一直无法理解任何 git doc 文件。所以这没什么帮助。 (每个 doc 文件都假定您了解其他每个 doc 文件的细微之处!)【参考方案3】:

使用此代码

git update-index --assume-unchanged file-name

【讨论】:

真的很有趣。我必须在我的 maven 项目中使用密码,但我不想在 git 存储库上发布它,所以我在本地、属性中放置了没有值的占位符,我提交它,然后我插入密码,但标记使用建议的命令更改文件。所以密码没有公布。【参考方案4】:

我通常做的是

git stash

git whatever-else

git stash apply

git stash clear

【讨论】:

fwiw 你也可以使用 'git stash pop' 来同时执行最后两个操作(尽管如果你愿意的话,'git stash clear' 会清除所有的存储条目)。【参考方案5】:

不能忽略跟踪的文件,因此您必须先将它们从索引中删除。添加一个.gitignore 忽略您不想要的目录,然后删除它们,并使用git rm --cached 删除任何落后者。

【讨论】:

嗯,我试试这个,但后来我将所有文件列为已删除。我应该提交它并且 --cached 会导致它不会被推送到遥控器吗?或者我得到了什么。错误的?对我来说最重要的是不破坏远程 (svn) 存储库。 你不能提交任何没有从你的索引开始的东西。 git rm --cached 所有你不想提交的东西,然后在本地添加一个 .gitignore 文件,其中包含“*”。现在,无论你 git add 多少,你都不会再在索引中看到这些文件了。 啊,我想我现在明白 --cached 了。它只会从索引中删除东西,而不会影响工作树。我不确定我是否遗漏了什么,但是AFAIS 我正在寻找相反的情况,将其从工作树中删除而不触及索引。或者我可以以某种方式使用它吗?【参考方案6】:

什么在我的案例中起作用:

git restore --staged filename

示例:git restore --staged index.js

【讨论】:

以上是关于忽略git中修改(但未提交)的文件?的主要内容,如果未能解决你的问题,请参考以下文章

git-忽略已提交的文件或目录

git忽略已经提交的文件在本地的修改

git commit时暂时忽略已提交的文件

git提交时忽略指定文件

git怎么把忽略文件变成普通文件

Git中添加但未提交的已删除文件可以恢复吗? [复制]