¿Cómo revierto mis cambios en un submódulo de git?
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?
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 --recursive
es obvio, pero --checkout
impide " Skipping submodule ...
" (consulte los detalles de omisión ).
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
Vaya al directorio del submódulo, luego haga una git reset --hard
para restablecer todos los archivos modificados a su último estado confirmado. Tenga en cuenta que esto descartará todos los cambios no confirmados.
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.