我的存储库中有一些文件应忽略,我将它们添加到.gitignore中,但是,当然,它们不会从我的存储库中删除。
所以我的问题是,是否存在使用filter-branch的魔术命令或脚本可以重写我的历史记录并轻松删除所有这些文件?或者只是一个将创建删除操作的命令?
我的存储库中有一些文件应忽略,我将它们添加到.gitignore中,但是,当然,它们不会从我的存储库中删除。
所以我的问题是,是否存在使用filter-branch的魔术命令或脚本可以重写我的历史记录并轻松删除所有这些文件?或者只是一个将创建删除操作的命令?
Answers:
您可以从存储库中手动删除它们:
git rm --cached file1 file2 dir/file3
或者,如果您有很多文件:
git rm --cached `git ls-files -i --exclude-from=.gitignore`
但这似乎不适用于Windows上的Git Bash。它产生一条错误消息。以下效果更好:
git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
关于在没有这些文件的情况下重写整个历史记录,我高度怀疑是否存在自动方法。
我们都知道改写历史是不好的,不是吗?:)
git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cached
似乎可以解决问题
git ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}
在任何操作系统上工作的更简单方法是
git rm -r --cached .
git add .
git commit -m "Removing all files in .gitignore"
您基本上读取了所有文件,.gitignore中的文件除外
由于未跟踪.gitignore中的文件,因此可以使用git clean命令以递归方式删除不受版本控制的文件。
使用git clean -xdn
进行试运行,看看将被删除。
然后使用git clean -xdf
执行它。
基本上,git clean -h
或man git-clean
(在Unix中)将为您提供帮助。
请注意,此命令还将删除暂存区域中没有的新文件。
希望能帮助到你。
.gitignore
都被跟踪。
git clean -xdn
是不会删除的试运行。下一个会。
通过使用sed处理.gitignore语句的输出,我做了一个非常简单的解决方案:
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
说明:
sed
简单吗?
在Linux中,您可以使用以下命令:
例如,我想删除“ * .py〜”,因此我的命令应为==>
find . -name "*.py~" -exec rm -f {} \;