【问题标题】:How to clean up unused side-branches in your commit trees?如何清理提交树中未使用的侧分支?
【发布时间】:2012-08-01 09:21:06
【问题描述】:

您将如何清理提交树中未使用的侧分支(不是真正的 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?

【问题讨论】:

  • git gc 可能会有所帮助:kernel.org/pub/software/scm/git/docs/git-gc.html
  • 不是 100%。标题暗示了这一点,但问题文本实际上更多地讨论了如何理解和输出此类提交的状态。不过,里面有很多很好的建议,可以用来在这里写下这个问题的答案。
  • 你真的看过接受的答案(和其他答案)吗? 我怎样才能删除这样的提交?:一旦你的 reflog 条目过期,这些对象也会被git gc 清理。 还有更多关于过期时间的信息,甚至关于如何将所有悬空提交标记为已过期...您还需要什么信息?
  • 是的。正如我所说的那样,信息可能就在那里,只需要在这里理解和制定这个问题的答案。我现在这样做了,但我无法以这种方式给其他人(比如你!?)提供声誉点数,这让我感到不舒服。

标签: git git-rebase


【解决方案1】:

tarsius 写了in an answer to another question

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

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

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

git checkout <dangling_commit_id>
git branch <new_branch_name_of_your_choice>

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

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2015-11-07
    • 2022-01-24
    • 2018-04-15
    相关资源
    最近更新 更多