2009-07-11 80 views
1

我很难从我的主分支合并到一个单独的分支,我一直在开发相当长的一段时间。Git:无法从主分支合并“对象 - 这是一个子模块”

做一个简单的合并,我得到如下:

shell$ git merge master 
fatal: cannot read object asd211f3a58febecd4e447szxs733079211c71b7sa '/my/sub/dir/foo~master': It is a submodule! 

我从来没有设置图书馆“富”作为一个子模块明确。我犯了一个错误,把一个本身已经被git版本化为一个.git子目录的库移植到主项目中,这也是一个git存储库。

显然我没有正确地移除子模块,或其他东西被严重破坏。

更紧迫的问题是,在失败的合并之后,我通过'git status'看到了大量的项目文件。除'未跟踪文件'外,还有文件'已被更改,但未被添加'。这些不是来自我的分支的文件,它们是来自主文件的文件。

我甚至不知道有多少个不同层次的破碎。但这是一个两步问题。子模块除了显示合并失败后的一堆文件之外。

清理此库的最佳方法是什么?

+0

我有同样的问题,其中子模块正确的分支,但不是在主人。它完全阻止了合并。 – 2009-11-24 14:44:52

回答

1

可能,我建议:

git reset --hard ORIG_HEAD 

然后调查与子模块:

git submodule status 

你有.gitmodules文件的地方吗?尽最大努力从两个分支中删除子模块的概念(提交),然后重新尝试合并。

+0

试过了,得到如下: 壳$ git的复位 - 硬ORIG_HEAD现在 头以f6ed2d5富 壳$ git的子模块的状态 壳$ git的结帐主 错误:未跟踪的工作树文件“/路径/到/某些/ dir/foo.png'将被合并覆盖。 shell $ – Coocoo4Cocoa 2009-07-11 20:41:30

0

在我的情况下,我有一个名为“main”的分支,它依赖于库的特定版本,作为子模块进行存储和跟踪。主(中继)使用库的开发版本,因此已删除子模块。做一个简单的git合并时,它得到的子模块会失败,并且下一步该怎么做没有提供线索:

git merge --no-commit main/urology-main 
fatal: cannot read object 7bd71249fc9575b7985bcd6b65e77f14690a6be6 'Utech_DTools': It is a submodule! 

谷歌打开了这个similar question它被建议使用一个特定的“决心”合并策略:

git merge -s resolve --no-commit main/urology-main 
ERROR: Utech_DTools: Not handling case 66001ac8d03d8b930c72536d3946ca40e3810320 -> -> 7bd71249fc9575b7985bcd6b65e77f14690a6be6 

但是,合并在跳过子模块后仍然继续。