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

我承诺并推送一些目录到github。 之后,我改变了.gitignore文件,添加一个应该被忽略的目录。 一切工作正常,但(现在忽略)目录保持在github上。

如何从github和版本库历史中删除该目录?

.gitignore文件中的规则仅适用于未跟踪的文件。 由于该目录下的文件已经在你的仓库中提交,所以你必须取消它们,创build一个提交,并将其推送到GitHub:

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

如果没有重写存储库的历史logging,则无法从历史logging中删除该文件 – 如果其他人正在使用存储库,或者您正在使用多台计算机,则不应该这样做。 如果你仍然想这样做,你可以使用git filter-branch来重写历史logging – 这里有一个有用的指南 。

另外,请注意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忽略的所有文件/文件夹,保存你必须手动select每一个


这似乎已经停止对我的工作,我现在做:

  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 

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

要忽略来自下一次提交的文件夹,请创build一个名为.gitignore的文件,并将该文件夹的名称放入其中。 你可以放多less你想要的

.gitignore文件将如下所示

 /FolderName 

删除目录

布伦戴尔的回答应该是有效的,但是出于一些奇怪的原因,这跟我没有关系。 我必须先将第一个命令输出的文件名input到一个文件中,然后循环遍历该文件并逐个删除该文件。

 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 

布伦德尔的第一个答案不适合我。 但是,它给我看了正确的方法。 我做了这样的事情:

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

我build议您通过运行以下语句首先检查要删除的文件:

 git ls-files -i --exclude-from=.gitignore 

我为Visual Studio使用了一个默认的.gitignore文件,我注意到这是删除项目中的所有日志和bin文件夹,这不是我想要的操作。

注意:此解决scheme仅适用于Github Desktop GUI 。

通过使用Github Desktop GUI,它非常简单。

  1. 将文件夹暂时移到其他位置(离开项目文件夹)。

  2. 编辑你的.gitignore文件,并删除github页面上将删除主存储库的文件夹条目。

  3. 提交并同步项目文件夹。

  4. 将该文件夹重新移到项目文件夹中

  5. 重新编辑.gitignore文件。

就这样。

如果您使用的是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