【问题标题】:"Fatal: bad object" error using git subtree push使用 git subtree push 的“致命:坏对象”错误
【发布时间】:2012-09-18 23:05:03
【问题描述】:

这是一个菜鸟问题,但我有能力解决这个问题。我继承了一个 git 子树的奇怪问题,似乎是 repo 损坏。

这是场景:基于 git 的项目 A 的子树正在项目 B 中使用。部分部署脚本使用将子树推送到项目 B 的 repo:

git subtree push -P sub/path/name --squash git@github.com:MyCo/project_b.git projectb_branch

它开始推送提交并失败

"fatal: bad object {sha}" 

我在源代码库的 git 日志中搜索了 SHA。它显示在提交中:

git-subtree-dir: app/assets/ui
git-subtree-split: {sha}

目标 repo (project_b) 确实具有该 SHA 的提交,但源 repo 没有。我浏览了子树 shell 脚本,我可以看到它在尝试使用 git log 查找该对象时失败(在调用 git log -l --pretty=format:'%T' {sha} 的 toptree_for_commit 函数中)。

在这一点上,我不知所措,但渴望找到解决方案。在我有限的知识允许的情况下,我已经对此进行了研究,因此我欢迎任何可以让我更接近解决方案的提示、技巧或 RTFM。

由衷的感谢!

【问题讨论】:

  • 您本地的git reflog 是否包含{sha}
  • 不。不幸的是没有。

标签: git subtree


【解决方案1】:

我刚刚遇到了这个问题,并能够通过以下方式解决:

git remote add shared $url
git fetch shared
git subtree push -P $prefix shared $branch

可能对所有人都没有帮助,但让我免于破解回购结构。

【讨论】:

  • 澄清一下,对于像我这样的菜鸟,$url、$prefix 和 $branch 需要用您自己的正确 url、前缀和分支来填写。
【解决方案2】:

我遇到了类似的问题:git subtree push ... 曾经在计算机上工作,而我在 git subtree add ... 上工作,但无法在第二台计算机上工作:

$ git subtree push --prefix lib git@github.com:lib/lib.git master
...
...
fatal: bad object {sha} 

修复是首先从存储库中提取更改(即使没有更改):

git subtree pull --prefix lib git@github.com:lib/lib.git master

即使它没有拉任何东西,push 也能正常工作:

git subtree push --prefix lib git@github.com:lib/lib.git master

【讨论】:

    【解决方案3】:

    我已经想通了;我在提交信息中找到了错误 sha 的引用。

    解决此问题的最简单方法是:

    • 停止使用已创建的子树拆分,
    • 将内容移动到不同的子目录,然后
    • 重新拆分子树。

    与将提交退回到有问题的提交然后重新应用它们相比,这有点混乱,但更不容易出错(建议在对类似问题的回答中)。

    不漂亮,但它完成了工作。

    【讨论】:

      【解决方案4】:

      git pull 为我工作。如果您当前的分支不是远程分支,请使用

      将其设为远程分支
      `git push -u origin <branchname>`
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-26
        • 2020-08-21
        • 2019-08-19
        • 2011-12-01
        • 1970-01-01
        • 2013-09-11
        • 2013-12-04
        相关资源
        最近更新 更多