【问题标题】:Removing invalid git-subtree-split hash删除无效的 git-subtree-split 哈希
【发布时间】:2014-12-22 23:27:06
【问题描述】:

我的存储库中的子树存在问题。我可以拉得很好,但是当我试图推动它时,它会突然向我展示:

fatal: bad object 9775d8fba16f51e14cba873f78129d3d166f5888

我在我的.git 文件夹中进行了一些搜索,发现了这个:

.git/subtree-cache/81555/549ffeaa00e89a145f24ccdb0735c07d8d84b2ff
1:9775d8fba16f51e14cba873f78129d3d166f5888

Commit 549ffeaa00e89a145f24ccdb0735c07d8d84b2ff 是一个较旧的提交,我在其中拉取了子树。拉动是一个壁球(就像项目的偏好一样),当时没有任何问题。

查看提交本身,我看到了:

git-subtree-split: 9775d8fba16f51e14cba873f78129d3d166f5888

是哪个坏对象导致了我的问题。这是我能找到的对该哈希的唯一引用。 git show 9775d8fba16f51e14cba873f78129d3d166f5888 报告错误对象,搜索 .git 文件夹仅显示上述提交。所以在我看来,这是唯一记录哈希的地方。

有没有办法以某种方式剔除这个引用,使我能够再次推送?我已经尝试清理存储库,重新克隆,从我的存储库中删除子树并重新拉取它。似乎没有什么可以删除参考,所以我猜这里有一个更深层次的问题。

【问题讨论】:

    标签: git git-subtree


    【解决方案1】:

    我最终找到了解决此错误的方法。它可能有点迂回,但它成功了:

    1. 我使用--ignore-joins--rejoin 选项创建了一个新的git subtree split
    2. 我将子树推送到远程的新分支。
    3. 我将远程的主分支合并到我的新分支中。
    4. 我将新分支合并回 master。
    5. 我将子树拉回到我的应用项目中。

    这似乎通过在应用程序中创建一个“新”子树来解决问题,该子树不包含带有无效引用的提交。

    希望如果其他人看到同样的问题,这可能会帮助他们。 :)

    【讨论】:

    • --ignore-joins 在运行split 时确实避免了“坏对象”失败,尽管提取的历史记录也包括来自子树的合并。
    • 将远程添加到子存储库并执行git remote update 使git subtree split 工作,但是以在历史记录中包含合并提交为代价,因此需要从中挑选新的提交那。我称之为 git subtree 的错误,因为它直接引用了主存储库中子存储库的提交。
    猜你喜欢
    • 2016-09-13
    • 2020-07-22
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2014-12-05
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多