¿Qué causa los conflictos de submodules en git, y cómo deberían resolverse?

Estamos usando submodules y somos nuevos en git.

A menudo vemos conflictos de fusión para los submodules, ningún file está en conflicto, solo el submodule. Hay múltiples versiones enumeradas en la salida del git submodule summary . Los resolvemos ejecutando git add <submodule> en el superproyecto.
Pero hoy tuvimos un desarrollador que perdió un compromiso del submodule cuando resolvió el conflicto de esta manera.
¿Ejecuta un git add para elegir la versión remota? ¿No deberían fusionarse los contenidos del submodule? Si ella hizo cambios en el submodule y los cometió (lo cual veo), ¿por qué desaparecería ese compromiso después de que ejecutó la extracción y resolvió el conflicto?

Tanto los conflictos de files como los conflictos de submodules ocurren cuando la bifurcación actual y la bifurcación en la que se desea fusionar divergen .

Simplemente significa que existe una situación ambigua: legítimamente puede querer "ganar" en cualquier caso dado. Por lo tanto, si bien puede parecer "molesto", simplemente resaltan sus abundantes opciones para especificar lo que desea (y debe especificar lo que desea). (Y, todo lo que los progtwigdores hacen todos los días es simplemente para especificar detalles).

Parece que el git-add-the-submodule-on-the-superproject debería haber funcionado. Sin embargo, también tenía la opción de realizar git-checkout-on-the-superproject de inmediato. Esto se menciona en este enlace (resolver conflictos de submodules), que habla de la diferencia entre conflictos de files y conflictos de modules de sum , y cómo resolverlos:

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

Su submodule local y el submodule remoto han divergido.

 git checkout --theirs submodulename 

o para tu versión:

 git checkout --ours submodulename 

y luego confirmar los cambios con git add y confirmar los cambios.

Nota: Su shell puede agregar una barra inclinada al nombre del submodule si completa la pestaña, ya que también es un subdirectory. Si es así, debes eliminarlo o obtendrás:

 error: pathspec 'submodulename/' did not match any file(s) known to git.