Git:无法从主分支“对象 - 它是一个子模块”合并

时间:2009-07-11 19:59:02

标签: git version-control

我很难从我的主分支机构合并到一个单独的分支机构,我已经开发了很长一段时间。

进行直接合并我得到以下内容:

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

我从未明确地将库'foo'设置为子模块。我犯了一个错误,将一个本身由git版本化的库和一个.git子目录移动到主项目中,这也是一个git存储库。

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

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

我甚至不确定有多少不同级别的破碎。但这是一个两步问题。子模块除了出现失败的合并后的一堆文件外。

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

2 个答案:

答案 0 :(得分:1)

我可以建议:

git reset --hard ORIG_HEAD

然后用以下方法调查子模块:

git submodule status

您是否有.gitmodules个文件?尽力从两个分支中删除子模块的概念(提交),然后重新尝试合并。

答案 1 :(得分:0)

就我而言,我有一个名为“main”的分支,它依赖于库的特定版本,作为子模块存储和跟踪。 master(trunk)使用库的dev版本,因此删除了子模块。进行简单的git合并会在到达子模块时失败,并且没有提供下一步操作的线索:

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

Google提出了similar question,建议使用特定的“解决方案”合并策略:

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

但是,跳过子模块后合并确实继续。