8

您将如何清理提交树中未使用的侧分支(不是真正的 git 分支)?

示例(树、假提交哈希、提交消息、可选 [指针]):

*    0001 last commit [master] [origin/master] [HEAD]
| *  0002 old, unused merge
|/|
* |  0003 some remote commits
* |  0004 another commit from remote
| *  0005 old, unused commits
|/
*    0006 old tree

路径 0001、0003、0004、0006 应该保持不变,但提交 0002 和 0005 没有用,也没有任何好处。如何删除提交 0002 和 0005?

4

1 回答 1

12

tarsius在回答另一个问题时写道:

git reflog expire --expire=now --all
git gc --prune=now

这会清除 reflog,然后清理存储库。一开始清理 reflog 并不总是有效,因为git-gc只要 reflog 没有过期(默认为 90 天),由 reflog 标记的无意义提交就会保持活动状态。

据我所知,在这样做之后,所有悬空提交都真的消失了。所以人们应该确定一个人真的不再需要所有这些了。如果真的想保留一些悬空提交,可以:

git checkout <dangling_commit_id>
git branch <new_branch_name_of_your_choice>

或使用git format-patch将整个提交存储在文本文件中。

于 2012-08-01T12:18:20.927 回答