我有以下git分支:master和dev:
*master*
|
A--B--C
\--D--E
|
*dev*
Run Code Online (Sandbox Code Playgroud)
在重新设计开发大师后,我有:
*master*
|
A--B--C--D'--E'
\--D--E |
|
*dev*
Run Code Online (Sandbox Code Playgroud)
所以D和E仍然处于"死分支".我该如何删除它们?
您不需要:因为提交D并且E没有指向它们的1个名称,所以它们有资格进行"垃圾收集".最终git会运行git gc并将它们扔掉.
如果你想加快速度,你可以git gc自己跑,但脚注1开始发挥作用.:-)
1这不完全正确.虽然分支名称dev现在包含提交ID E'(副本),但有两个reflog条目,一个用于dev,一个用于HEAD,允许您(和git)查找提交E.还有一个半特殊名称,ORIG_HEAD持续到其他东西替换其内容(例如另一个rebase或a git merge).
默认情况下,大多数reflog条目持续30天或90天,具体取决于是否可以从当前分支头部访问提交.一旦reflog条目到期,那么该对象就是垃圾收集的候选者.
作为另一项预防措施,git gc除非它们至少有两周的时间,否则单独留下"松散物体"(默认情况下 - 这是可配置的,并且还有一个--prune=选项可以覆盖它).所以一般来说,对于一个名义上被遗弃的物体,它会消失:
(当然,git gc必须运行,虽然git会在"看起来很有希望"时自动运行.)