2011-06-01 8 views
52

Necesito revertir cambios locales para implementaciones. (Yo había usado svn revert para esto en días skool SVN.)¿Cuál es la diferencia entre "git checkout -f" y "git reset --hard HEAD"?

Y estoy usando git reset --hard HEAD para esto. (También git fetch y git merge origin/$branch --no-ff para la sincronización con la rama ascendente.)

Pero algunos artículos apuntan a git checkout -f para revertir los cambios.

¿Cuáles son las principales diferencias entre estos comandos. ¿De qué manera es el recomendado?

+1

posible duplicado de [¿Hay una diferencia entre "git reset --hard hash" y "git checkout hash"?] (Http://stackoverflow.com/questions/2541545/is-there-a-difference-between -git-reset-hard-hash-and-git-checkout-hash) – Casebash

Respuesta

37

Los dos tienen exactamente el mismo efecto. Te recomiendo que elijas la solución con la que te sientas más cómodo.

Pero si en este caso particular el efecto es el mismo, con diferentes valores sería completamente diferente. Básicamente (hay más, vea los temas vinculados) con un restablecimiento, mueva la rama actual y la CABEZA a una confirmación específica, pero con un pago, solo mueve la CABEZA. Para más detalles, ver a continuación.


Recursos:

Sobre el mismo tema:

9

¿No tiene el representante para comentar sobre otras respuestas, sin embargo, sólo quería añadir que me encontré con un caso en el que los dos comandos no tienen la misma efecto. Me puse en un estado extraño así que este es definitivamente un caso extremo. Esto es lo que sucedió:

Estaba en una sucursal, todo limpio. Revisé master git checkout master y encontré en git status que hubo cambios en los archivos existentes no configurados para una confirmación (sí, en el código que acabo de verificar). Intenté esconderme para volver a un estado limpio, el escondite decía que se había completado pero git status aún no se había modificado. También intenté git reset --hard HEAD. También informó que se completó con éxito, pero el estado no fue diferente. No pude abortar estos cambios extraños. Sin embargo, git checkout -f ha resuelto esto. Pude alejarme de este extraño estado. Entonces, al menos de alguna manera, los dos no son lo mismo.

+0

Acabo de tener exactamente la misma situación. Hubo un montón de archivos modificados que git reset --hard HEAD no haría desaparecer pero git checkout -f did, por lo que claramente no son los mismos en algún nivel. –

+1

En nuestro caso, fue debido a cambios en los permisos de archivos; esto lo solucionó http: // stackoverflow.com/questions/1257592/how-do-i-remove-files-saying-old-mode-100755-new-mode-100644-from-unstaged-cha –

Cuestiones relacionadas