restaurar - git ver archivos modificados
¿Cómo uso ''git reset--hard HEAD'' para volver a un commit anterior? (2)
Esta pregunta ya tiene una respuesta aquí:
- Cómo revertir un repositorio Git a un commit anterior 39 respuestas
Sé que Git hace un seguimiento de los cambios que hago en mi aplicación, y los conserva hasta que los confirmo, pero aquí es donde estoy colgado
Cuando quiero volver a una confirmación anterior, uso:
git reset --hard HEAD
Y Git regresa:
HEAD is now at 820f417 micro
¿Cómo puedo revertir los archivos en mi disco duro a ese compromiso anterior?
Mis siguientes pasos fueron:
git add .
git commit -m "revert"
Pero ninguno de los archivos ha cambiado en mi disco duro ...
¿Qué estoy haciendo bien / mal?
Primero, siempre vale la pena señalar que git reset --hard
es un comando potencialmente peligroso, ya que desecha todos los cambios no confirmados. Por seguridad, siempre debe verificar que la salida del git status
de git status
esté limpia (es decir, vacía) antes de usarla.
Inicialmente dices lo siguiente:
Así que sé que Git hace un seguimiento de los cambios que hago en mi aplicación, y los conserva hasta que los confirmo, pero aquí es donde estoy colgado:
Eso es incorrecto Git solo registra el estado de los archivos cuando los escalones (con git add
) o cuando creas un commit. Una vez que ha creado una confirmación que tiene sus archivos de proyecto en un estado particular, son muy seguros, pero hasta entonces Git no está realmente "haciendo un seguimiento de los cambios" en sus archivos. (Por ejemplo, incluso si git add
para preparar una nueva versión del archivo, eso sobrescribe la versión previamente preparada de ese archivo en el área de preparación).
En su pregunta, continúe y pregunte lo siguiente:
Cuando quiero volver a una confirmación anterior, uso: git reset --hard HEAD Y git devuelve: HEAD está ahora en 820f417 micro
¿Cómo puedo revertir los archivos en mi disco duro a ese compromiso anterior?
Si realiza git reset --hard <SOME-COMMIT>
, Git:
- Haga que su rama actual (normalmente
master
) vuelva al punto en<SOME-COMMIT>
. - Luego haga que los archivos en su árbol de trabajo y el índice ("área de preparación") sean iguales a las versiones confirmadas en
<SOME-COMMIT>
.
HEAD
apunta a su rama actual (o confirmación actual), por lo que todo lo que git reset --hard HEAD
hará es deshacerse de cualquier cambio no confirmado que tenga.
Entonces, supongamos que el buen compromiso al que desea volver es f414f31
. (Puede encontrarlo a través git log
o de cualquier navegador de historial). Luego, tiene algunas opciones diferentes dependiendo de lo que quiere hacer exactamente:
- Cambia tu rama actual para que apunte a la confirmación anterior en su lugar. Podrías hacer eso con
git reset --hard f414f31
. Sin embargo, esto es volver a escribir el historial de su sucursal, por lo que debe evitarlo si ha compartido esta sucursal con alguien. Además, las confirmaciones que hiciste después def414f31
ya no estarán en la historia de tu ramamaster
. Cree un nuevo compromiso que represente exactamente el mismo estado del proyecto que
f414f31
, pero solo lo agrega al historial, para que no pierda ningún historial. Puedes hacerlo siguiendo los pasos sugeridos en esta respuesta , algo como:git reset --hard f414f31 git reset --soft HEAD@{1} git commit -m "Reverting to the state of the project at f414f31"
ADVERTENCIA: git clean -f
eliminará los archivos sin seguimiento, lo que significa que se han ido para siempre, ya que no están almacenados en el repositorio. Asegúrese de que realmente desea eliminar todos los archivos sin seguimiento antes de hacer esto.
Prueba esto y ve a git clean -f
.
git reset --hard
no eliminará los archivos no git reset --hard
, mientras que git-clean
eliminará los archivos del directorio raíz rastreado que no estén bajo el seguimiento de Git.
Alternativamente, como dijo @Paul Betts, deberías hacer git clean -xdf
(aunque ten cuidado, eso también elimina todos los archivos ignorados).