Cómo actualizar un submodule en git para el compromiso HEAD en ese repository externo

Tuve problemas para encontrar la respuesta a esto, así que lo estoy publicando para la posteridad.

La situación es que tienes un repository git con un submodule (similar a un svn externo). Desea actualizar esa reference para apuntar a una confirmación diferente en el repository externo. Podrías pensar que 'git submodule sync' o 'git submodule update' harían eso, estarías equivocado.

Los pasos son:

  • cd al directory real en el que se encuentra el submodule.
  • ejecuta 'origen de origen de git' o lo que quieras hacer para establecerlo en un nuevo compromiso.
  • cd fuera de ese directory (presumiblemente a la raíz del repository) y ejecute "estado de git" – verá que el directory está cambiado. Si haces un diff, verás algo como esto:
 diff - git a / default / bin / hdvcs b / default / bin / hdvcs
 índice bbd3f56..7c9394c 160000
 --- a / default / bin / hdvcs
 +++ b / default / bin / hdvcs
 @@ -1 +1 @@
 -Subproyecto commit bbd3f56898054e533e81b52b90b94155841b40a8
 + Subproyecto commit 7c9394c8520e41a704e6658360064758b20a3dfc
  • cometer este cambio

Si desea actualizar todos sus submodules de git a HEAD del repository remoto simplemente escriba

git submodule foreach git pull origen maestro