如何删除未使用的 git 远程提交?

Posted

技术标签:

【中文标题】如何删除未使用的 git 远程提交?【英文标题】:How to remove unused git commits remote? 【发布时间】:2020-07-30 13:38:41 【问题描述】:

最近我使用git rebase -i --root master 清理了我的 git 存储库。我将一些提交压缩在一起,编辑了一些,相应地设置了时间,最后我使用git push --force-with-lease origin master 将我的本地状态推送到远程。

这工作得很好,我的 repo 现在已经清理了,就像看到 here 一样,但不知何故,我能够找到一个旧的提交哈希,当通过 url 显式搜索它时,我仍然能够查看旧树如here所见,不再使用。

所以我的问题是,是否以及如何从我的远程存储库中删除这些旧的提交/树?

有什么想法吗?

【问题讨论】:

***.com/a/34594815/7976758 【参考方案1】:

“删除”一个提交实际上并没有删除它:它会停留一段时间。除非您已将哈希 ID 保存在某处,否则您将无法找到它。

您保存了哈希 ID 3597386eaa550367e5531e4ec019f04e1d7e40df。更准确地说,您保存的 GitHub URL 包含哈希 ID,然后您将其提供给 GitHub,以便他们可以在他们身边使用哈希 ID — 并且仍然可以找到仍然存在的提交。

它会一直存在,直到不再存在。确切的时间很难说:Git 有一个维护命令可以清理未使用的提交。在您自己的存储库副本中,您可以按照自己的计划运行此维护命令。在 GitHub 上的副本中,您将受到他们的维护计划的支配。

(如果它真的很重要,你可以要求 GitHub 人员进行早期清理。但是,你可以通过这种方式处理的大多数事情——比如摆脱暴露密码的提交——都很好地进入了“太到你可以真正完成它的时间,所以很少有任何理由为此烦恼。)

【讨论】:

【参考方案2】:

您可能想查看this answer。

TL;DR:

如果它们不属于分支或标签,它们将在一段时间后被删除。

【讨论】:

【参考方案3】:

如果您想手动删除它们,可以使用 pickdrop 命令。

选择提交哈希 删除提交哈希

例如: git rebase -i --root master 选择 2d224bc6cec9b33ae9b910dbef5efdd707625383 删除 2d224bc6cec9b33ae9b910dbef5efdd707625383

【讨论】:

【参考方案4】:

接受的答案很棒。

我想补充的是,GitLab 允许您调整清理作业(git gcgit repack)在远程存储库上执行的频率,请参阅 documentation了解详情。

【讨论】:

以上是关于如何删除未使用的 git 远程提交?的主要内容,如果未能解决你的问题,请参考以下文章

git 如何删除远程提交方法总结

如何删除远程 git 钩子?

Git - 如何返回最后一次提交并删除所有未提交的文件?

github使用——如何恢复被删去文件。

如何删除git远程仓库的某个文件

如何在GIT Rebase Interactive Squash之后删除远程存储库上的历史记录提交消息