¿Cómo revierto mis cambios en un submódulo de git?

Resuelto Eric asked hace 12 años • 15 respuestas

Tengo un submódulo git (RestKit) que agregué a mi repositorio.

Accidentalmente cambié algunos archivos allí y me gustaría volver a la versión fuente. Para hacer eso, intenté ejecutar

Mac:app-ios user$ git submodule update RestKit

Pero como puedes ver aquí, esto no funcionó porque todavía es "contenido modificado":

Mac:app-ios user$ git status
...
#   modified:   RestKit (modified content)

Incluso

Mac:app-ios user$ git submodule update -f RestKit 

no revierte archivos modificados localmente.
¿Cómo reinicio el contenido de ese submódulo?

Eric avatar Jun 06 '12 06:06 Eric
Aceptado

Un método más seguro que todas las respuestas anteriores:

git submodule deinit -f .
git submodule update --init

El primer comando "desvincula" completamente todos los submódulos, el segundo realiza una nueva verificación de ellos.
Lleva más tiempo que los otros métodos, pero funcionará cualquiera que sea el estado de sus submódulos.

Si sus submódulos tienen sus propios submódulos, en lugar de un segundo comando, intente:

git submodule update --init --recursive --checkout

Dónde --recursivees obvio, pero --checkoutimpide " Skipping submodule ..." (consulte los detalles de omisión ).

qwertzguy avatar Dec 11 '2014 05:12 qwertzguy

Si desea hacer esto para todos los submódulos, sin tener que cambiar de directorio, puede realizar

git submodule foreach git reset --hard

También puede utilizar el indicador recursivo para aplicarlo a todos los submódulos:

git submodule foreach --recursive git reset --hard
theraven avatar Jul 26 '2013 01:07 theraven

Vaya al directorio del submódulo, luego haga una git reset --hardpara restablecer todos los archivos modificados a su último estado confirmado. Tenga en cuenta que esto descartará todos los cambios no confirmados.

Jamie Penney avatar Jun 05 '2012 23:06 Jamie Penney

Bueno para mi tener

git reset --hard

simplemente restablezca el submódulo al estado en el que se desprotegió, no es necesario que el repositorio principal haga referencia al compromiso/estado. Seguiré teniendo "contenidos modificados" como dijo OP. Entonces, para que el submódulo vuelva a la confirmación correcta, ejecuto:

git submodule update --init

Luego, cuando lo hago git status, queda limpio en el submódulo.

checksum avatar Dec 27 '2013 02:12 checksum