在GitHub上完全从Git repo和remote远程删除文件

Abh*_*ogi 77 git git-remote git-filter-branch git-rm

我不小心添加了一个图像文件夹并提交.然后,我又做了一次提交.然后我git rm -f ./images再次使用并提交了这些文件.

现在,我在那个分支(master)中做了很多提交.在我的HEAD中,我没有该./static/images文件夹.

因此,我的回购规模增加了很多.如何完全删除这些斑点?我想从我的远程GitHub仓库中删除它.

Dar*_*uuk 124

这就是你要找的东西:忽略不删除文件.我建议你阅读那个页面,但这里是使用的具体命令:

git filter-branch --index-filter \
'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
Run Code Online (Sandbox Code Playgroud)

另外,要从git创建的缓存中删除所有已删除的文件,请使用:

rm -rf .git/refs/original/ && \
git reflog expire --all && \
git gc --aggressive --prune
Run Code Online (Sandbox Code Playgroud)

您可以在下面找到有关上一个命令的更多信息,以及在一个操作中执行所需操作的脚本:git:forever从历史记录中删除文件或文件夹.

另一个链接有很多解释:删除敏感数据.

[编辑]另外,请参阅此StackOverflow问题:从Git历史记录中删除敏感文件及其提交.

(从natacado上面链接的问题的答案复制的命令.)如果您已从工作副本中删除了文件,则以下内容应该有效.找出添加了不需要的文件的提交的哈希值.然后做:

git filter-branch --index-filter \
'git update-index --remove filename' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force
Run Code Online (Sandbox Code Playgroud)


RJF*_*ner 9

您可以重新绑定整个分支并删除添加图像的提交和删除它们的提交.

git rebase -i master
Run Code Online (Sandbox Code Playgroud)

您将看到一系列提交.删除包含要删除的恶意提交的行.("dd"删除vim中的一行,默认编辑器.然后用ZZ保存)

然后在自然git垃圾收集过程中清理悬空提交,这个过程可以用Darhuuk的答案中给出的命令强制执行.

编辑:即使您已经推送到远程存储库,这也会有效,但您必须使用--force.(这同样适用于git filter-branch解决方案).

请注意,对于从您的分支机构撤出的任何人来说,这都会非常烦人.他们应该咨询"从上游反叛中恢复".


据推测,您最初意外添加的图像是您希望保留的提交的一部分.在这种情况下,您需要在rebase期间编辑提交以拆分您希望保留的部分.您可以通过使用"e"(用于编辑)替换该提交的"rebase -i"列表中的"pick"来完成此操作.rebase进程将在此处停止,您可以使用"git commit --amend"拆分提交.