我有一些文件,例如一个文件error_log
,其中一些文件可能在添加到.gitignore
文件之前被意外添加到git中,所以我想知道如何删除所有实例来自Git仓库的文件的名称是什么?
请注意,我希望它们留在服务器上,因此我将使用--cached
选项。
答案 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 here或GitHub'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然后运行脚本