是什么导致git中的子模块冲突,应该如何解决?

use*_*638 10 git merge conflict git-submodules

我们正在使用子模块,我们是git的新手.

我们经常看到子模块本身的合并冲突,没有文件冲突,只有子模块.输出中列出了多个版本git submodule summary.我们通过git add <submodule>在超级项目中运行来解决它们.
但是今天我们让开发人员在以这种方式解决冲突时失去了子模块的提交.
运行git add会选择远程版本吗?不应该合并子模块的内容吗?如果她在子模块中进行了更改并提交了它们(我看到了),那么为什么在执行拉动并解决冲突后该提交会消失?

And*_*ner 13

您的本地子模块和远程子模块已发生分歧.

git checkout --theirs submodulename
Run Code Online (Sandbox Code Playgroud)

或者您的版本:

git checkout --ours submodulename
Run Code Online (Sandbox Code Playgroud)

然后使用git add提交更改并提交更改.

注意:如果tabcomplete,shell可能会向submodulename添加一个尾部斜杠,因为它也是一个子目录.如果是这样,你需要删除它,否则你会得到:

error: pathspec 'submodulename/' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用:上游更改模块,并在合并他们的更改时我尝试了'git checkout --theirs ios_src',但是在'git diff origin/dev_ios'中.我仍然看到我的本地oid标记为'-dirty'而新的标记没有标记为脏.我期待看到我的本地线是带有'-dirty'标记的新oid.承诺也留给我我的oid.进入模块并明确检查根,然后添加它工作,但这是乏味的. (3认同)

cha*_*ley 10

这两个文件的冲突和子模块发生冲突时,您的当前分支和分支你想做某些合并,变成有分歧.

这仅仅意味着一个模棱两可的情况出现-你可以合法地希望无论在任何给定的情况下,以"双赢".因此,虽然它看起来很"烦人",但它们只是突出显示您丰富的选项以指定您想要的内容(并且您必须指定您想要的内容).(并且,程序员每天所做的只是指定细节.)

好像git-add-the-submodule-on-the-superproject应该有效.但是,您也可以立即选择git-checkout-on-the -proproject.这个链接(解决子模块冲突)中提到了这个问题,它讨论了文件冲突和summodule冲突之间的区别,以及如何解决它们:

http://pacific.mpi-cbg.de/wiki/index.php/Git_Conflicts

  • 我认为该链接目前无法正常运行.Web存档救援:http://web.archive.org/web/20100925080451/http://pacific.mpi-cbg.de/wiki/index.php/Git_Conflicts (5认同)