我有以下问题-我想从git存储库历史记录中删除一些提交(是的,我知道这是一个坏习惯,但我知道我在做什么)。我使用rebase做到了(我从那里得到了说明:https://ncona.com/2011/07/how-to-delete-a-commit-in-git-local-and-remote/),并且提交已从我的远程分支中删除,但是历史记录中仍然存在(在DETACHED_HEAD上)。我如何摆脱它们,使它们完全消失? 谢谢您的帮助!
答案 0 :(得分:1)
...提交已从我的远程分支中删除,但仍在历史记录中(在DETACHED_HEAD上)。我该如何摆脱它们,使它们完全消失?
正常的做法是让他们自己死亡。垃圾收集器最终将摆脱不再使用的所有内容。您也可以使用git gc
手动运行它。
“ DETACHED HEAD”仅表示您当前正在检出未链接到分支名称的任何提交(或您使用提交SHA总和而不是分支名称检出了该提交),表示如果添加/从这种状态提交东西,该操作将发生,但默认情况下不会链接到任何东西,并且在此阶段不会自动更新任何分支名称。
但是,如果您有充分的理由使它们消失(意外地以可读格式提交了密码,老板扑打信息或将色情图片存储在错误的文件夹中),则首先需要检查您的提交是否不再可访问,既不是来自标记或分支名称之类的官方参考,也并非来自其他任何保持稳定的提交,也不来自不同引用日志中的任何条目。
因此,您需要清除所有这些内容,以确保可以清除您的提交。
您可以看一下this entry来了解传递给git gc
的哪些选项,以使之立即生效,以使所有内容都过期,但是在您完全理解之前不要着急他们做什么。
很遗憾,您只能在本地存储库上执行操作。如果您有权,可以使用“ push -f”之类的工具在远程存储库上重写历史记录。但是,对于gc
之类的清洁操作,您需要直接访问git服务器,然后才能从那里进行操作。