volver tag remove pendientes ignorar deshacer cambios archivos anterior git version-control undo

git - tag - Cómo realizar el equivalente a TFS de ''Deshacer cambios pendientes''



ignorar cambios git (4)

¿Cómo realizo el equivalente de TFS ''Deshacer cambios pendientes'' en Git, en uno o varios archivos?

Eso básicamente significa hacer estos pasos:

  • Deshacer cambios en el disco
  • Restableciendo cualquier cambio que Git haya descubierto.
  • Obteniendo los últimos cambios en el archivo de Git

Sería bueno saber las diferencias (si existen) en los comandos para hacer esto si (1) lo ha cambiado en el disco, sin agregarlo , pero también cuando (2) ha ejecutado el comando agregar y por una bonificación, (3) incluso cuando haya confirmado el cambio .


  1. git checkout [path] o (repo completo) git reset --hard HEAD
  2. git reset [path] seguido de git checkout [path]
  3. git reset --hard [commit] para restaurar el estado del repositorio en [commit] , que debe ser un tree-ish

Este comando deshará los cambios locales y los restaurará a las versiones actuales en el repositorio:

git reset --hard

Puede volver a su último compromiso válido emitiendo:

git reset --hard HEAD

Si solo desea restaurar un solo archivo, use git checkout en su lugar:

git checkout -- file_name.extension git checkout HEAD file_name.extension


Mi equivalente a TFS undo en Git con Eclipse es simplemente hacer clic con el botón derecho en el archivo y seleccionar Replace with -> HEAD Revision (o la versión que desee).


Para 1 y 2, todo lo que necesitas hacer es:

git stash -u #same effect as git reset --hard, but can be undone

Esto tirará cualquier cambio. Ten cuidado si usas reset . Lea sobre la manipulación del índice y las permutaciones de las opciones duras, blandas y mixtas con el restablecimiento y la verificación. El libro de progreso explica esto en detalle: http://progit.org/2011/07/11/reset.html

Para 3,

git reset --hard HEAD^

pero sería mejor emitir un git stash -u antes de esto, en caso de que tenga cambios pendientes.

Esto restablecerá la rama actual al padre de la confirmación actual. Busque "tree-ish" en línea. ^ y ~ N después de una referencia le permitirán señalar los puntos alcanzables en el historial de esa referencia. Para entender cómo se rastrea la historia en git, "Git para informáticos" explica bien el Directed Acyclic Graph: http://eagain.net/articles/git-for-computer-scientists/

Para obtener archivos individuales del estado de la confirmación actual (es decir, descartar cambios), puede utilizar la extracción

git checkout HEAD -- <a list of files>

Si emitió el último comando de reinicio anterior por error, no está en problemas. Git realiza un seguimiento de dónde se utilizan las ramas para apuntar en el reflog.

git reflog

Te enumeraré la historia. Puedes ver en esa salida cómo hacer referencia a cada uno, así que:

git reset --hard HEAD@{1}

restablecerá la rama a donde solía haber 1 cambio antes.

Para agregar, si desea borrar los archivos ignorados y los archivos sin seguimiento, puede limpiar con esto:

git clean -xdf