save el estado de git actual de un repository

Necesito almacenar el estado actual de un git repo. Más tarde necesito regresar al estado.

El estado guardado debe contener la twig actual y los cambios en ella.

Ejemplo:

  1. Estoy en la twig master y he modificado foo.py.
  2. save Estado
  3. modificar el repository: ejemplo: pagar otra sucursal.
  4. volver al estado: cambiar a maestro y revertir foo.py modificado

AFAIK stash o una sucursal temporal no ayudarán aquí, ya que el nombre de la sucursal no se guarda.

Puedo vivir con commands de fontanería, ya que save y restaurar se hará en un guión.

El uso de git stash saveá el estado: hace dos 1 commits que no están "on" en ninguna twig (se encuentran mediante el nombre especial de refs/stash ), que contienen el estado de su índice y el estado de su tree de trabajo. A continuación, utiliza el git reset --hard para deshacerse de cualquier tree de trabajo y cambios de índice, lo que hace que sea seguro cambiar las twigs.

La única pieza de estado que el stash no guarda es el nombre de la twig, si la hay, en la que se encontraba cuando se guardó el alijo.

Para save eso, debe ejecutar git symbolic-ref HEAD (use --short para get un nombre de twig, y ​​tenga en count que sale distinto de cero si HEAD no es una reference simbólica, es decir, está actualmente "separado"; en este caso usted puede necesitar save el ID de confirmación actual en algún lugar, probablemente en una reference para protegerlo).

Tenga en count que git stash save no hará nada si no hay un estado para save, por lo que es aconsejable verificar que exista refs/stash y apunte a una ID de confirmación nueva y diferente después del paso de git stash save . (Esto no es demasiado difícil de hacer en un script: use git rev-parse -q --verify refs/stash para get el nuevo ID de confirmación, y git rev-parse -q --verify refs/stash antes de save para get el anterior. Como con git symbolic-ref saldrá distinto de cero si la reference no existe).


1 O bien, se compromete tres veces si usa git stash save -u o git stash save -a . El tercer commit contiene files que normalmente git deja en paz: files sin seguimiento e ignorados. Consulte la documentation de git stash para más detalles.