如何清理提交树中未使用的侧枝(不是真正的git branch)?
示例(树,伪提交哈希,提交消息,可选[指针]):
* 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?
答案 0 :(得分:9)
tarsius写了in an answer to another question:
git reflog expire --expire=now --all git gc --prune=now
清除reflog,然后清理存储库。首先清理reflog并不总是有效,因为只要reflog没有到期(默认为90天),git-gc
就会保留由reflog标记的意义提交。
据我所知,在这样做之后,所有悬挂的提交都真的消失了。所以应该确定一个人真的不再需要所有这些了。如果一个人真的想要保留一些悬空提交,可以:
git checkout <dangling_commit_id>
git branch <new_branch_name_of_your_choice>
或使用git format-patch将整个提交存储在文本文件中。