git-reset hash
establece la referencia de la rama con el hash dada, y opcionalmente comprueba hacia fuera, con --hard
.
git-checkout hash
establece el árbol de trabajo con el hash dado; y a menos que el hash sea un nombre de rama, terminarás con una cabeza separada.
en última instancia, ofertas de git con 3 cosas:
working tree (your code)
-------------------------------------------------------------------------
index/staging-area
-------------------------------------------------------------------------
repository (bunch of commits, trees, branch names, etc)
git-checkout
por defecto simplemente actualiza el índice y el árbol de trabajo, y puede actualizar opcionalmente algo en el repositorio (con la opción -b
)
git-reset
por defecto simplemente actualiza el repositorio y el índice, y, opcionalmente, el árbol de trabajo (con la opción --hard
)
Se puede pensar en el repositorio de esta manera:
HEAD -> master
refs:
master -> sha_of_commit_X
dev -> sha_of_commit_Y
objects: (addressed by sha1)
sha_of_commit_X, sha_of_commit_Y, sha_of_commit_Z, sha_of_commit_A ....
git-reset
manipula lo que las referencias rama apuntan.
Suponga que su historia es así:
T--S--R--Q [master][dev]
/
A--B--C--D--E--F--G [topic1]
\
Z--Y--X--W [topic2][topic3]
Tenga en cuenta que las ramas son sólo nombres que avanzan automáticamente cuando se cometió.
Así que tienen las siguientes ramas:
master -> Q
dev -> Q
topic1 -> G
topic2 -> W
topic3 -> W
Y su rama actual es topic2
, es decir, los puntos de la cabeza a los Tema2.
HEAD -> topic2
Entonces, git reset X
se restablecerá el nombre topic2
señalar a X; lo que significa que si hace un commit P en branch topic2, las cosas se verán así:
T--S--R--Q [master][dev]
/
A--B--C--D--E--F--G [topic1]
\
Z--Y--X--W [topic3]
\
P [topic2]
Cubrí esto en una actualización de mi respuesta a una de sus preguntas anteriores - mire el arte ascii cerca de la parte superior, particularmente donde dice "Digression: ..." (por mucho que me gustaría más representante para volver a responder aquí) – Cascabel
Creo que puede publicar su respuesta aquí y obtener un representante de ella. Si alguien busca este conocimiento en particular, no encontrará la otra publicación. Éste apunta a un tema muy específico, y merece tener su página separada. Por cierto, parece que eres mi mentor de Git :-) harigato, sensei! –
Pero lo entiendo, la diferencia es que el restablecimiento mueve la bifurcación y no se paga. –