2011-02-26 10 views
20

Si hago cambios en el árbol de trabajo y sin embargo no he cometido, y me gustaría revertir los cambios que he hecho, es que hay una diferencia entre¿Hay alguna diferencia entre el reinicio de git --hard HEAD y git checkout ?.

git reset --hard HEAD 

y

git checkout . 

?

+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-y-git-checkout-hash) – Casebash

Respuesta

26

git checkout -- . obviamente solo funcionará en el directorio actual (y los subdirectorios del mismo), git reset --hard operará en el árbol de trabajo completo.

git checkout -- . solo actualizará el árbol de trabajo y dejará los archivos ya montados como están, mientras que git reset --hard coincidirá con el índice y el árbol de trabajo con el compromiso HEAD.

cuando se utiliza con un refspec:

  1. reset establecerá la cabeza rama actual a lo dado cometer (y coincide con el índice y el árbol de trabajo)
  2. checkout pasará a dicha rama, dejando a los cambios locales intacta, cuando tocan archivos que no cambian entre la rama actual y la rama a ser sacados
3

This es un buen (y completa) explicación por parte del autor de la Pro Git libro.

5

Estas respuestas son buenas. Me gustaría agregar que si ha eliminado archivos, que están en etapas pero aún no están comprometidos, entonces un pago por git. solo no volverá a traer los archivos eliminados al espacio de trabajo. Un git reset --hard will.

Cuestiones relacionadas