Deshace el command reciente "git add." Disparado en git bash

He cometido un error al git add . Ahora tengo varios files en el área de preparación. Sé que puedo usar el git reset para descomprimir files, pero esto me llevaría la mayor parte de mi time.

Estoy buscando una solución que me permita ahorrar time. Ahora quiero saber eso

  • ¿Hay alguna forma de deshacer git add . command disparado en git. Para que no tenga que git reset file a hacer el git reset file varias veces.

  • Si el path anterior no es posible, entonces ¿hay alguna forma de que pueda restablecer múltiples files con un solo command?

¿Has almacenado los files que quieres que estén en escena, o estás dispuesto a que todos los files vuelvan a estar completamente sin grabar?

Esto último es muy fácil: use git reset sin arguments adicionales, como comentó Galath . Esto hace un restablecimiento --mixed :

  • mover la twig actual a la confirmación nombrada, pero sin confirmación con nombre, eso significa mover la twig actual a HEAD , y HEAD es la confirmación actual, por lo que movemos la confirmación actual hacia sí misma, que no hace nada; entonces
  • reemplace los files en el índice con sus versiones en la confirmación nombrada (que, nuevamente, no nombramos, entonces ese es el compromiso HEAD ).

(Estos dos pasos son las partes --soft y --mixed , sin --hard , git reset omite el tercer paso para eliminar los cambios del tree de trabajo. Obviamente, no quiere que se borren, por lo que no debería usar --hard .)

El primero es más difícil. Para get una list de todos los files por etapas, use:

 git diff --cached --name-only 

Si desea restablecer selectivamente la mayoría de estos files, pero no todos, puede escribir esos nombres de file en un file (preferiblemente fuera de su tree de trabajo) como /tmp/list , luego edite el file para eliminar los nombres quieres mantenerte en escena Entonces:

 git reset -- $(cat /tmp/list) 

o:

 xargs git reset -- < /tmp/list 

ejecutar git reset -- en cada nombre de ruta. Esto supone que no hay espacio en blanco en los nombres de los files; si lo hay, use engaños de shell adicionales para romper solo en nuevas líneas (suponiendo que no haya nuevas líneas en los nombres de las routes).

Si ha organizado cuidadosamente algunos, pero no todos, algunos files usando git add -p , por lo general es posible recuperarlos usando git fsck --lost-found y hurgando en todos los "blobs" que cuelgan, pero eso rara vez vale la pena el esfuerzo .

Parece que esto debería funcionar: git reset -p <file_name>