根据git documentation,我可以从仓库历史记录中删除文件,如下所示:
git filter-branch --tree-filter 'rm -rf filename' HEAD
我尝试了此操作,并收到以下错误消息:
You need to run this command from the toplevel of the working tree.
所以,我尝试了这个,并得到了相同的错误:
git filter-branch --index-filter 'rm -f /dist/bikeMap.html' HEAD
在检查了多个stackoverflow问题之后,我也尝试过
git filter-branch --index-filter 'rm -f /dist/bikeMap.html' master..HEAD
git filter-branch --tree-filter 'rm -f /dist/bikeMap.html' --all
git filter-branch --tree-filter 'rm -f /dist/bikeMap.html' -- --all
git filter-branch --tree-filter 'rm -f /dist/bikeMap.html' master
等等都给出相同的错误。
git status
说
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
我的git版本是2.11.0
。
编辑:我现在也尝试过:
git filter-branch --index-filter "git rm --cached --ignore-unmatch dist/bikeMap.html" HEAD
git filter-branch --index-filter "git rm --cached --ignore-unmatch dist/bikeMap.html" -- HEAD
git filter-branch -f --index-filter 'git rm --cached --quiet --force "dist/bikeMap.html"' --prune-empty -- HEAD
git filter-branch -f --index-filter 'git rm --cached --quiet --force dist/bikeMap.html' --prune-empty -- HEAD
git filter-branch -f --index-filter 'git rm --cached --quiet --force dist/bikeMap.html' --prune-empty -- master
git filter-branch -f --index-filter 'git rm --cached --quiet --force dist/bikeMap.html' --prune-empty master
git filter-branch -f --index-filter 'git rm --cached --quiet --force /dist/bikeMap.html' --prune-empty master
git filter-branch -f --index-filter 'git rm --cached --quiet --force /dist/bikeMap.html' --prune-empty HEAD
相同错误。
编辑:进步!
git filter-branch --index-filter 'git rm --cached --quiet --force dist/bikeMap.html' --prune-empty
导致错误
Rewrite 419e8702fd8a5fe9ddad59a0fd7ff008edffdeab (1/47) (0 seconds passed, remaining 0 predicted)
fatal: pathspec 'dist/bikeMap.html' did not match any files
index filter failed: git rm --cached --quiet --force dist/bikeMap.html
如果我ls dist/bikeMap.html
得到
dist/bikeMap.html
因此,它存在。
如何使用git filter-branch
从我们的存储库中删除文件?
答案 0 :(得分:1)
要使用--tree-filter
,请将您的rm
命令从使用/dist/bikeMap.html
更改为使用dist/bikeMap.html
,即在前面加上斜杠。
要使用--index-filter
,请将命令更改为git rm --cached --ignore-unmatch dist/bikeMap.html
,即,将git rm
与其他选项一起使用(并删除斜杠)。
(索引过滤器将更快。如果您只想从具有一个命名文件的所有提交中删除一个命名文件,请使用带有git rm --cached --ignore-unmatch
的索引过滤器。)