【问题标题】:How to delete erroneous merge commits?如何删除错误的合并提交?
【发布时间】:2010-09-14 18:25:36
【问题描述】:

通过一个菜鸟错误的喜剧,我发现自己在本地回购中处于以下情况:

使用git reset 我已经将分支标签移动到我想要它们的位置,现在我想删除看起来像未命名分支的 3 个提交。我已经研究/尝试了很多东西,包括gcprune,但都没有成功。

我意识到我可以删除本地 repo 并重新克隆它,但是我想把它作为一个学习机会。

所以问题是:如何删除这些提交?

【问题讨论】:

    标签: git


    【解决方案1】:

    jleedev's answer 肯定会让他们消失,但我真的认为你不应该那样做。

    一旦提交不再在 reflog 中,下次 gc(由几个关键命令自动运行)将自动清理提交,该提交将在 90 天后过期。也就是说,它们最终会消失; git 只是阻止你删除任何你可能不想删除的东西。

    如果只是在gitk 中看到它们让您感到困扰,您所要做的就是重新加载视图(或重新启动 gitk)。现在这些提交不在分支上,它们将不会显示。是的,它们仍然会在您的存储库中,但除非您的磁盘空间不足,否则这不会伤害您。这只是一个安全网。

    【讨论】:

    • +1 好点,唉,我已经完成了gc。从来没有意识到 gitk 中 updatereload 之间的区别。
    【解决方案2】:

    你看过reflog吗?它跟踪 HEAD 在您的存储库中移动的每一种方式(并且它通过防止自动删除您的提交来完成它的工作)。

    使用git refloggit log -g 对其进行检查。用git reflog expire --expire=now --all 核对它,然后你可以垃圾收集未使用的提交。

    【讨论】:

    • 这行得通,但我真的看不出有任何理由做如此激烈的事情......除非这些提交包含一些巨大的 blob,否则它们不会造成任何伤害。
    • 唉,清理 reflog 后,git gc --aggressive --prune=now 仍然没有任何反应。
    • 保护它!看来它确实完成了这项工作,但我在 gitk 中没有看到它,因为我只是在刷新。当我重新启动 gitk(根据 Jefromi 的建议)时,悬空的分支消失了。
    猜你喜欢
    • 2021-08-30
    • 2021-04-20
    • 2021-04-14
    • 2012-09-02
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2015-03-25
    • 2011-05-04
    相关资源
    最近更新 更多