我有本地提交,不在我想要删除的任何分支上.我不想重新定义它们,我真的想删除它们,并且丢失与这些提交相关的所有内容.
他们是这样做的命令吗?
到目前为止,我已经尝试了许多建议的交互式rebase,但它只是移动提交,它不会删除它们.我也尝试使用reflog delete,但我无法弄清楚如何将特定的提交ID传递给命令.
这是工作树:
o [master] Commit #6
|
o Commit #5
|
| o Commit #4
|/
o Commit #3
|
o Commit #2
|
o Commit #1
Run Code Online (Sandbox Code Playgroud)
我想删除提交#4.
And*_*ndy 37
如果提交没有被任何引用,它将被及时使用git的垃圾收集删除.
如果你想提前强制它,请使用 git gc --prune=now --aggressive
要完全删除提交,您需要删除对其的所有引用,然后强制进行积极的垃圾收集。
如果仍有分支指向提交,请先删除它们。
接下来,您需要从引用日志中刷新提交,默认情况下,引用日志保留对您在过去 90 天内访问过的每个提交的引用(将 [commit-hash] 替换为提交哈希的前 8 个字符):
git reflog --all | grep [commit-hash] | cut -d' ' -f2 | cut -d':' -f1 | tac | xargs git reflog delete
Run Code Online (Sandbox Code Playgroud)
(我曾经tac
颠倒删除的顺序,因为如果提交在引用日志中多次出现,则删除一个条目会移动其后面的所有条目)
最后,强制垃圾回收:
git gc --prune=now --aggressive
Run Code Online (Sandbox Code Playgroud)
之后,git show [commit-hash]
将不再显示提交,因此您会知道它确实被删除了。