我们团队使用的自定义Git工具为每个处理的新功能/错误创建了一个分支。
通常,当更改接近完成时,远程分支将通过其他工具进行更改,使分支的本地副本不同步。
经常出现的问题是如何清理开发人员本地存储库中剩余的所有陈旧分支。需要一个快捷方式,因为当有数十个陈旧的分支时,键入许多git branch -D branchname
可能会很烦人。
我提供的一些建议是从.git/refs/heads
文件夹中删除文件。
以下是我发送的全文:
批量快速删除分支的一个手动技巧是删除 来自
.git/refs/heads folder
的文件。你会看到文件名 对应分支机构。分支只是指向sha的指针 提取文件的内容,因此删除文件将删除分支。 请注意,这将仅删除指针,而不是实际提交 指针碰巧指向。
这个建议似乎是安全的,但我很偏执,这种方法可能会失败或导致工作丢失。
除了用户犯了明显的错误,例如删除master
文件外,这是一个安全的建议吗?
编辑:此问题与this question不同,因为由于我们内部工具的性质,--merged
通常不足以确定是否有本地分支陈旧与否。此外,我们不想一举删除分支......需要对每个分支进行手动检查,以避免删除仍然活跃的分支。
答案 0 :(得分:2)
一个缺陷是,如果过去已经“打包”了引用,则各种分支名称和相应的哈希ID将位于.git/packed-refs
而不是 或 < / strong>在.git/refs/heads/
。
如果两个地方都出现了名称,则从B
删除分支名称 .git/refs/heads/B
只会显示旧的打包引用。如果仅在.git/packed-refs
中,则不会有单独的文件要删除。
这也留下了陈旧的reflogs。这可能暂时是一个功能(如在the comment by Chris中),但请注意,reflog从不包含@{0}
值,只包含@{1}
和更高的值。
我强烈怀疑Git的某些未来版本将完全放弃每个分支文件的一个文件技巧,因为它在Windows和MacOS文件系统上进行大小写折叠时会非常糟糕。使用git branch -D
或git update-ref -d
显然更好/更安全/更具前瞻性(请注意update-ref
需要拼写出完整的引用名称。)