如何从Git存储库中删除包含文件的单个目录?


当前回答

如果您正在从GitHub web应用程序中删除目录,您将找到一个删除选项。然而,在这之后,它会给你一个被删除的文件列表,底部有提交选项。请记住提交它。否则,目录将不会被删除。

参考-https://docs.github.com/en/repositories/working-with-files/managing-files/deleting-files-in-a-repository

其他回答

这两个答案的组合对我有用

git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push

如果仍然显示一些警告,请手动删除文件

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push

您可以使用Attlasian源树(Windows)(https://www.atlassian.com/software/sourcetree/overview). 只需从树中选择文件并按下顶部的“删除”按钮。文件将从本地存储库和本地git数据库中删除。然后提交,然后推送。

如果您正在从GitHub web应用程序中删除目录,您将找到一个删除选项。然而,在这之后,它会给你一个被删除的文件列表,底部有提交选项。请记住提交它。否则,目录将不会被删除。

参考-https://docs.github.com/en/repositories/working-with-files/managing-files/deleting-files-in-a-repository

我之前已经提交了该文件夹,并希望删除历史记录中的目录。

我执行了以下操作:

将文件夹添加到.gitignore:

echo Folder_Name/ >> .gitignore

从所有提交中删除:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

从旧提交中删除refs:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

确保完全删除所有旧引用

rm -Rf .git/logs .git/refs/original

执行垃圾收集

git gc --prune=all --aggressive

将更改推送到在线存储库:

git push

你到此为止。

但您可以通过以下操作将所有更改推送到所有分支:但是要小心这个命令!

git push origin --all --force
git push origin --tags --force

之后,该文件夹从git中删除,但没有从本地磁盘中删除。

如果由于某种原因,karmakaze所说的不起作用,您可以尝试使用或使用文件系统浏览器(例如,在Windows文件资源管理器中)删除您想要的目录。删除目录后,发出命令:git add-A然后gitcommit-m'删除目录'然后git推送原始主机。