tag repositorio que log example eliminar crear git git-submodules

repositorio - git push example



¿Cómo reverso mis cambios a un submódulo de git? (10)

Bueno para mí, teniendo

git reset --hard

simplemente restaure el submódulo al estado donde se desprotegió, no necesario para el compromiso / estado repo referido del principal. Todavía tendré "contenidos modificados" como dijo OP. Entonces, para que el submódulo regrese a la confirmación de corrección, ejecuto:

git submodule update --init

Entonces cuando hago el git status , está limpio en el submódulo.

Tengo un submódulo de git (RestKit) que he agregado a mi repositorio.

Accidentalmente cambié algunos archivos y me gustaría volver a la versión original. Para hacer eso, traté de correr

Mac:app-ios user$ git submodule update RestKit

Pero como puede ver aquí, esto no funcionó ya que 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 los archivos modificados localmente
¿Cómo reinicio el contenido de ese submódulo?


Desde Git 2.14 (Q3 2017), no tienes que entrar en cada submódulo para hacer un git reset (como en el git submodule foreach git reset --hard )

Esto se debe a que el reinicio de git ahora sabe cómo acceder recursivamente a los submódulos.

Consulte la confirmación 35b96d1 (21 de abril de 2017) y confirme f2d4899 , commit 823bab0 , commit cd279e2 (18 de abril de 2017) por Stefan Beller ( stefanbeller ) .
(Fusionada por Junio ​​C Hamano - gitster - en commit 5f074ca , 29 de mayo de 2017)

builtin / reset: add --recurse-submodules switch

git-reset es otro manipulador de árbol de trabajo, que debería enseñarse sobre los submódulos.

Cuando un usuario usa git-reset y solicita que se repita en submódulos, esto restablecerá los submódulos al nombre del objeto tal como se grabó en el superproyecto, separando los HEAD.

Advertencia : la diferencia entre:

  • git reset --hard --recurse-submodule y
  • git submodule foreach git reset --hard

es que el primero también reiniciará el árbol de trabajo principal del repositorio padre, ya que este último solo restablecería el árbol de trabajo de los submódulos.
Entonces use con precaución.


Esto funcionó para mí, incluso recursivamente en submódulos (quizás por eso tu -f no funcionó, porque cambiaste un submódulo dentro del submódulo):

git submodule update -f --recursive


Esto funciona con nuestras bibliotecas ejecutando GIT v1.7.1, donde tenemos un repositorio de paquetes DEV y un repositorio de paquetes LIVE. Los repositorios en sí mismos no son más que un caparazón para empaquetar los activos para un proyecto. todos los submódulos

El LIVE nunca se actualiza intencionalmente, sin embargo, pueden producirse archivos de caché o accidentes, dejando el repositorio sucio. Los nuevos submódulos añadidos al DEV también deben inicializarse dentro de LIVE.

Repositorio de paquetes en DEV

Aquí queremos extraer todos los cambios preliminares que aún no conocemos, luego actualizaremos nuestro repositorio de paquetes.

# Recursively reset to the last HEAD git submodule foreach --recursive git reset --hard # Recursively cleanup all files and directories git submodule foreach --recursive git clean -fd # Recursively pull the upstream master git submodule foreach --recursive git pull origin master # Add / Commit / Push all updates to the package repo git add . git commit -m "Updates submodules" git push

Paquete de repositorio en VIVO

Aquí queremos extraer los cambios que están comprometidos con el repositorio DEV, pero no cambios desconocidos aguas arriba.

# Pull changes git pull # Pull status (this is required for the submodule update to work) git status # Initialize / Update git submodule update --init --recursive


Para git <= 2.13, estos dos comandos combinados deben restablecer sus repositorios con submódulos recursivos:

git submodule foreach --recursive git reset --hard git submodule update --recursive --init


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

git submodule foreach git reset --hard

También puede usar el indicador recursivo para aplicar a todos los submódulos:

git submodule foreach --recursive git reset --hard


Un método más seguro a prueba de fallas que todas las respuestas anteriores:

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

El primer comando "desenlaza" por completo todos los submódulos, el segundo realiza una nueva comprobación de ellos.
Lleva más tiempo que los otros métodos, pero funcionará independientemente del estado de sus submódulos.


Vaya al directorio del submódulo, luego haga un git reset --hard para restablecer todos los archivos modificados a su último estado comprometido. Tenga en cuenta que esto descartará todos los cambios no comprometidos.


hacer 4 pasos secuenciales:

git submodule foreach git reset --hard HEAD git submodule update git submodule foreach "git checkout master; git pull" git submodule foreach git clean -f


mi manera de restablecer todos los submódulos (SIN separar y mantener su rama "maestra"):

git submodule foreach ''git checkout master && git reset --hard $ sha1''