【发布时间】:2010-09-14 18:25:36
【问题描述】:
通过一个菜鸟错误的喜剧,我发现自己在本地回购中处于以下情况:
使用git reset 我已经将分支标签移动到我想要它们的位置,现在我想删除看起来像未命名分支的 3 个提交。我已经研究/尝试了很多东西,包括gc、prune,但都没有成功。
我意识到我可以删除本地 repo 并重新克隆它,但是我想把它作为一个学习机会。
所以问题是:如何删除这些提交?
【问题讨论】:
标签: git
通过一个菜鸟错误的喜剧,我发现自己在本地回购中处于以下情况:
使用git reset 我已经将分支标签移动到我想要它们的位置,现在我想删除看起来像未命名分支的 3 个提交。我已经研究/尝试了很多东西,包括gc、prune,但都没有成功。
我意识到我可以删除本地 repo 并重新克隆它,但是我想把它作为一个学习机会。
所以问题是:如何删除这些提交?
【问题讨论】:
标签: git
jleedev's answer 肯定会让他们消失,但我真的认为你不应该那样做。
一旦提交不再在 reflog 中,下次 gc(由几个关键命令自动运行)将自动清理提交,该提交将在 90 天后过期。也就是说,它们最终会消失; git 只是阻止你删除任何你可能不想删除的东西。
如果只是在gitk 中看到它们让您感到困扰,您所要做的就是重新加载视图(或重新启动 gitk)。现在这些提交不在分支上,它们将不会显示。是的,它们仍然会在您的存储库中,但除非您的磁盘空间不足,否则这不会伤害您。这只是一个安全网。
【讨论】:
gc。从来没有意识到 gitk 中 update 和 reload 之间的区别。
你看过reflog吗?它跟踪 HEAD 在您的存储库中移动的每一种方式(并且它通过防止自动删除您的提交来完成它的工作)。
使用git reflog 或git log -g 对其进行检查。用git reflog expire --expire=now --all 核对它,然后你可以垃圾收集未使用的提交。
【讨论】:
git gc --aggressive --prune=now 仍然没有任何反应。