我有一个提交,git diff-tree --no-commit-id --name-only -r fef3ea9ff1ba8d62049fd5f3bc4e2e8a2c08bfd3
输出提交中的所有文件。
文件位于不同的文件夹中,许多是.pdf文件
我尝试:git rm *.pdf
并说:fatal: pathspec '*.pdf' did not match any files
如何从提交中删除所有.pdf文件?
编辑1
我尝试:git rm -r *.pdf
并且它给出了:
fatal: pathspec '*.pdf' did not match any files
编辑2
sudo git rm -r */*.pdf
给出
fatal: pathspec 'MyFolder/my_file.pdf' did not match any files
my_file.pdf是git diff-tree
输出
答案 0 :(得分:1)
git rm -r */*.pdf
答案 1 :(得分:1)
如果git状态显示这些文件已从当前工作树中删除,则可以确保它们在下次提交时被记录为已删除:
git ls-files --deleted | xargs git rm
如果它们未被删除,您可以找到并删除它们:
git ls-files | grep '\.pdf$' | xargs git rm
如果它们出现在过去的提交中,并且您想要从任何pdf文件中清除历史记录,请查看BFG repo cleaner(及其issue 78):
bfg -D "*.pdf" myrepo.git
答案 2 :(得分:1)
要删除您可以执行的所有*.pdf
个文件:
git ls-files '*.pdf' | xargs git rm
这假定文件仍然存在。
要更新最顶层的提交以便删除文件(除了更改的其他内容之外),您可以执行以下操作:
git commit --amend
要从最近历史记录中某个位置的提交中删除文件,请在TODO列表中使用git rebase --interactive
标记要更改的提交后,查找edit
并执行上述两项操作提交给你的。
要从历史记录深处的所有提交中删除文件,请查找git filter-branch
。
在所有情况下,有关重写已发布历史记录的警告都适用。