如何从Git仓库中删除某个文件名的所有实例?

时间:2016-03-18 10:59:16

标签: windows git git-rm

我有一些文件,例如一个文件error_log,其中一些文件可能在添加到.gitignore文件之前被意外添加到git中,所以我想知道如何删除所有实例来自Git仓库的文件的名称是什么?

请注意,我希望它们留在服务器上,因此我将使用--cached选项。

3 个答案:

答案 0 :(得分:1)

find -name "error_log" | xargs git rm --cached

应该做的伎俩

答案 1 :(得分:0)

您应该使用filter-branch从提交历史记录中完全删除它(所有提交):

git filter-branch --index-filter --prune-empty "find . -name error_log | xargs --no-run-if-empty git rm --cached --ignore-unmatch"

(解决方案5 from hereGitHub's remove sensitive data

注意! 您将 放弃所有旧版本的" error_log" 办法!只有处于最后状态的文件才可用。如果您只想从回购 中排除文件,以便日后不再跟踪 ,请使用@ blue112' s answer

答案 2 :(得分:0)

  

cd git-project-file

     读到i时;做git rm --cached $ PWD / $ i;完成<的.gitignore

然后提交

使用此功能,您可以从当前提交中删除这些文件。

如果要从历史记录中删除,则必须执行更多操作。因此,如果您需要,请在下方发表评论。

阐释:

你说:

  

我有某些文件,例如有一个是error_log,其中一些可能在添加到 .gitignore <之前偶然被添加到git / strong>文件...

所以脚本的作用是逐行读取.gitignore文件 所以脚本运行一个while循环

$ i是一行

$ PWD是当前目录的路径

所以$ PWD / $ i是.gitignore文件每行中文件的路径。

它为.gitignore中的每一行运行git rm --cached $ PWD / $ i。

如果文件$ PWD / $ i没有添加到git(即如果文件不在你的一个中,那么error_logs)就没有坏处。 如果它是你的一个error_logs,那么它将从缓存中删除该文件。

确保首先将文件添加到.gitignore然后运行脚本