我提交并将一些目录推送到github。之后,我修改了.gitignore文件,添加了一个应该忽略的目录。一切都很好,但(现在被忽略的)目录仍在github上。

如何从github和存储库历史记录中删除该目录?


当前回答

注意:此解决方案仅适用于Github桌面GUI。

使用Github桌面GUI非常简单。

暂时将文件夹移动到其他位置(从项目文件夹中移出)。编辑.gitignore文件并删除文件夹条目,该条目将在github页面上删除主存储库。提交并同步项目文件夹。将文件夹重新移动到项目文件夹中重新编辑.gitignore文件。

这就是全部。

其他回答

根据我的回答:如何从git存储库中删除目录?

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


删除目录的步骤

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

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

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

.gitignore文件将如下所示

/FolderName

第一种解决方案:

git rm --cached `git ls-files -i -c --exclude-from=.gitignore` 
git commit -m 'Removed all files that are in the .gitignore' 
git push origin main

这将删除git中的所有文件/文件夹,从而避免您必须手动选择每个文件/文件夹


第二种解决方案:它从本地git存储库中删除文件。git rm-r--缓存。git添加。gitcommit-m'删除了.gitignore中的所有文件'git推送原点主

--cached标志从git存储库中删除文件,但不从文件系统中删除。

Blundell的答案应该是有效的,但由于某种奇怪的原因,它与我无关。我必须首先将第一个命令输出的文件名导入一个文件,然后循环该文件并逐个删除该文件。

git ls-files -i --exclude-from=.gitignore > to_remove.txt
while read line; do `git rm -r --cached "$line"`; done < to_remove.txt
rm to_remove.txt
git commit -m 'Removed all files that are in the .gitignore' 
git push origin master

如果您使用的是PowerShell,请尝试将以下命令作为单个命令。

PS MyRepo> git filter-branch --force --index-filter
>> "git rm --cached --ignore-unmatch -r .\\\path\\\to\\\directory"
>> --prune-empty --tag-name-filter cat -- --all

然后,git push-force-all。

文档:https://git-scm.com/docs/git-filter-branch

注意:此解决方案仅适用于Github桌面GUI。

使用Github桌面GUI非常简单。

暂时将文件夹移动到其他位置(从项目文件夹中移出)。编辑.gitignore文件并删除文件夹条目,该条目将在github页面上删除主存储库。提交并同步项目文件夹。将文件夹重新移动到项目文件夹中重新编辑.gitignore文件。

这就是全部。