> 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
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
7 回答
.gitignore
文件中的规则仅适用于未跟踪的文件 . 由于该目录下的文件已经在您的存储库中提交,您必须取消它们,创建一个提交,并将其推送到GitHub:如果其他人正在使用您的存储库,或者您正在从多台计算机上使用它,则可以执行此操作 . 如果您仍想这样做,可以使用
git filter-branch
重写历史记录 - there is a helpful guide to that here .另外,请注意
git rm -r --cached some-directory
的输出将是:rm
是git关于存储库的反馈;文件仍在工作目录中 .我这样做:
这将删除你的git忽略的所有文件/文件夹,省去你必须手动选择每一个
这似乎已停止为我工作,我现在做:
根据我的答案:How to remove a directory from git repository?
仅从git存储库中删除文件夹/目录,而不是从本地尝试3个简单步骤 .
Steps to remove directory
Steps to ignore that folder in next commits
.gitignore 文件将如下所示
Blundell的第一个答案对我不起作用 . 然而它向我展示了正确的方法 . 我做了同样的事情:
我建议你先运行以下语句检查要删除的文件:
我正在使用Visual Studio的默认.gitignore文件,我注意到它删除了项目中的所有日志和bin文件夹,这不是我想要的操作 .
Blundell的答案应该有效,但出于某些奇怪的原因,它与我无关 . 我必须首先将第一个命令输出的文件名输入到一个文件中,然后遍历该文件并逐个删除该文件 .
注意:此解决方案仅适用于Github Desktop GUI .
通过使用Github Desktop GUI它非常简单 .
暂时将文件夹移动到另一个位置(从项目文件夹中移出) .
编辑您的
.gitignore
文件并删除将在github页面上删除主存储库的文件夹条目 .提交并同步项目文件夹 .
将文件夹重新移动到项目文件夹中
重新编辑
.gitignore
文件 .就这样 .
如果您使用PowerShell,请尝试以下单个命令 .
然后,
git push --force --all
.文件:https://git-scm.com/docs/git-filter-branch