协慌网

登录 贡献 社区

将目录添加到. gitignore 后,从远程存储库中删除目录

我提交并推送了一些目录到 github。之后,我更改了.gitignore文件,添加了一个应忽略的目录。一切正常,但(现在已忽略)目录保留在 github 上。

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

答案

.gitignore文件中的规则仅适用于未跟踪的文件。由于该目录下的文件已经在您的存储库中提交,因此您必须取消暂存它们,创建提交并将其推送到 GitHub:

git rm -r --cached some-directory
git commit -m 'Remove the now ignored directory "some-directory"'
git push origin master

您不能在不重写存储库历史记录的情况下从历史记录中删除文件 - 如果其他人正在使用您的存储库,或者您正在多台计算机上使用它,则不应这样做。如果您仍然想这样做,可以使用git filter-branch重写历史记录 -这里有一个有用的指南

另外,请注意git rm -r --cached some-directory的输出将类似于:

rm 'some-directory/product/cache/1/small_image/130x130/small_image.jpg'
rm 'some-directory/product/cache/1/small_image/135x/small_image.jpg'
rm 'some-directory/.htaccess'
rm 'some-directory/logo.jpg'

rm是来自 git 的关于存储库的反馈;文件仍在工作目录中。

我这样做:

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

这将删除 git 忽略中的所有文件 / 文件夹,省去了手动选择每个文件 / 文件夹的麻烦


这似乎已停止为我工作,我现在这样做:

git rm -r --cached . 
 git add .
 git commit -m 'Removed all files that are in the .gitignore' 
 git push origin master

按照我在这里的答案: 如何从 git 存储库中删除目录?

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


删除目录的步骤

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

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

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

.gitignore文件将如下所示

/FolderName

删除目录