将它们添加到.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,它非常简单。
-
将文件夹暂时移到其他位置(离开项目文件夹)。
-
编辑你的
.gitignore
文件,并删除github页面上将删除主存储库的文件夹条目。 -
提交并同步项目文件夹。
-
将该文件夹重新移到项目文件夹中
-
重新编辑
.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