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


当前回答

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

我执行了以下操作:

将文件夹添加到.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中删除,但没有从本地磁盘中删除。

其他回答

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

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

您可以在本地删除文件夹,然后按如下方式推送:

git rm -r folder_name
git commit -m "your commit"
git push origin master

要仅从git存储库而不是本地删除文件夹/目录,请尝试3个简单命令。


删除目录的步骤

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

在下次提交时忽略该文件夹的步骤

要在下次提交时忽略该文件夹,请在根文件夹(初始化git的主项目目录)中创建一个名为.gitignore的文件并将该文件夹名称放入其中。您可以忽略任意数量的文件/文件夹

.gitignore文件将如下所示

/FolderName

我的一位同事建议BFG Repo Cleaner,我认为它很强大。它不仅可以删除不需要的数据,还可以清除存储库中的任何相关提交信息。

转到git目录,然后键入以下命令:rm-rf<目录名>

删除目录后,通过以下方式提交更改:gitcommit-m“您的提交消息”

然后只需在远程GIT目录上推送更改:git推送原点<分支名称>