【问题标题】:How to recover HEAD problems in filtered repository?如何恢复过滤存储库中的 HEAD 问题?
【发布时间】:2021-09-14 11:03:41
【问题描述】:

通过过滤将我的工作区中的存储库分成两个后,我将它们“裸”克隆到新的源中,然后继续在当前分支的克隆工作区中工作,没有问题。

几次提交后,我将分支合并到master,然后成功推送。 接下来,我删除了工作区中过时的分支。

但是,当我也尝试删除“原始”存储库中过时的分支时,我遇到了以下问题:

  • git branch 列出了由于 fatal: Couldn't look up commit object for HEAD 而我无法使用 git branch -d 删除的分支。
  • git fsck 抱怨:notice: HEAD points to an unborn branch (bitmap-generic)

(我希望git fsck 能够识别那些“死”的分支并清理它们,但显然没有)

不幸的是,我没有记录确切的命令,但大致就是我所做的(基于 Preißel 和 Stachmann 的 Git 书籍第 1 版(德语)第 19.1 节中给出的说明):

  1. 备份:git clone --no-hardlinks --bare orig.git backup.git

  2. 删除不需要的文件:git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ...' --tag-name-filter cat --prune-empty -- --all

  3. 重组:git clone --no-hardlinks --bare backup.git new.git

  4. 删除备份:rm -rf backup.git

  5. 查看new.git 并继续努力

  6. 删除 new.git: git branch -d ... 中不需要的过时分支 我该如何解决这些问题? 使用的 Git 版本是 2.26.2。

【问题讨论】:

  • "接下来我删除了我工作区中过时的分支。"你能告诉我们如何(命令)吗?
  • git status 的输出是什么?
  • 除此之外,裸存储库没有检出分支。如果要删除远程分支,可以使用git push --delete
  • @dan1st git status 在存储库中没有意义,git push --delete 存在分支已经在工作区中删除的问题。还是会起作用?

标签: git git-branch


【解决方案1】:

(此答案基于 René Scharfe 提出的建议(经作者许可使用))

首先尝试为分支名称分配一个有效的提交。

% git branch --force bitmap-generic
fatal: Not a valid object name: 'bitmap-generic'.
% git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (173/173), done.
notice: HEAD points to an unborn branch (bitmap-generic)
...

备份存储库(我使用了cp -rp ...)以防万一你搞砸了。

为分支分配一些不存在的提交(该文件以前不存在;如果存在,则不需要):

% echo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >refs/heads/bitmap-generic

git branch 表示bitmap-generic 将是当前分支, 所以接下来需要更改:

# HEAD references the current branch
% cat HEAD
ref: refs/heads/bitmap-generic

编辑 HEAD,将 bitmap-generic 替换为 master(或任何不同的分支)。

% git branch --delete --force bitmap-generic
error: Couldn't look up commit object for 'refs/heads/bitmap-generic'

我没想到,但这似乎并不重要(我专注于分支名称,而git专注于提交ID);继续(让git开心):

# Re-assign branch "bitmap-generic" to HEAD commit:
% git branch --force bitmap-generic

最终:

% git branch --delete bitmap-generic
Deleted branch bitmap-generic (was 03aa7ca).

之后git fsck 不再抱怨。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 2012-03-04
    • 2021-03-30
    • 2011-11-02
    • 2015-06-22
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多