gpt4 book ai didi

git - 如何确定某个提交的可达性?

转载 作者:行者123 更新时间:2023-12-02 20:35:08 25 4
gpt4 key购买 nike

我正在尝试清理存储库:

local FIRST_COMMIT="bf450342272a94117d78eae34a140a2a39359dad"
git branch -d bad-master
git remote remove bad-remote
git rev-parse ${FIRST_COMMIT} > .git/shallow
git fsck --unreachable
git gc --prune=now

想法如下:

  • 保留单个分支(develop)分支
  • 删除所有不需要的引用
  • 使用 .git/shallow/gc --prune 剪切 develop 分支中的历史记录

完成此操作后,我验证了以下内容:

  • 没有定义 Remote
  • 没有定义标签
  • 有一个分支:develop
  • develop 分支中的历史记录确实减少到指定的提交

但是还有一个问题:

git rev-list --all

列出无法通过 develop 分支访问的提交!

我不明白为什么 git fsck --unreachable 没有列出这一点,以及为什么 git gc --prune=now 没有删除这些提交。唯一的解释是这些提交可以通过其他引用到达。哪些?

如何确定给定提交的可达性?

我的期望是:

  • 找出我迄今为止缺少的引用(分支/远程/标签/???)
  • 删除该引用
  • 之后,prune 将删除不需要的提交。

最佳答案

使用 git for-each-ref 迭代所有引用(默认是显示它们及其哈希 ID 和对象类型)。

请注意,git for-each-ref 仅查看引用,而不查看其相应的引用日志。对每个引用使用 git reflog 来检查(或过期)其引用日志。删除引用会删除其引用日志,因此如果没有其他引用,则问题很可能是 develop 的引用日志;但是, git rev-list --all 会查看所有引用,但不会查看引用日志,因此我希望还有其他一些引用可以找到这些提交。

关于git - 如何确定某个提交的可达性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54213011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com