¿Cuál es la diferencia entre "git reset" y "git checkout"?

Siempre pensé en git reset y git checkout como iguales, en el sentido de que ambos devuelven el proyecto a una cierta solución. Sin embargo, siento que no pueden ser exactamente lo mismo que sería superfluo. ¿Cuál es la diferencia real entre los dos? Estoy un poco confundido porque svn tiene svn co para volver a una solución.

AÑADIDO

El siguiente diagrama explica la diferencia, aunque en el caso de quizás demasiado simplificado o incorrecto. Que piensas ¿Está mal o demasiado simplificado?

2019

316
03 сент. set prosseek 03 sept. 2010-09-03 23:21 '10 a las 23:21 2010-09-03 23:21
@ 5 respuestas
  • git reset solo se trata de actualizar el índice , mover HEAD.
  • git checkout es una actualización del árbol de trabajo (al índice o al árbol especificado). Actualizará HEAD solo si verifica la sucursal (de lo contrario, recibirá una HEAD dedicada ).

A modo de comparación, ya que svn no tiene un índice, solo el árbol de svn checkout procesado copia esta revisión en un directorio separado. <ш> El equivalente más cercano para git checkout :

  • svn update (si está en la misma rama, lo que significa la misma URL de SVN)
  • svn switch (si solicita una instancia de una rama, pero desde otra URL del repositorio SVN)

Todos estos tres cambios en el árbol de trabajo ( svn checkout , update , switch ) solo tienen un comando en git: git checkout .
Pero dado que git también tiene el concepto de un índice (el "área de preparación" entre el repositorio y el árbol de trabajo), también tiene un git reset .


Thinkeye menciona Reset Desmitificado en los comentarios ".

Por ejemplo, si tenemos dos ramas: " master " y " develop ", apuntando a diferentes confirmaciones, y ahora estamos en " develop " (por lo tanto, HEAD apunta a ello), y ejecutamos git reset master , ' develop ' ahora apuntará al mismo mensaje que ' master '.

Por otro lado, si en cambio ejecutamos git checkout master , el develop no se moverá, HEAD . HEAD ahora apuntará a ' master '.

Entonces, en ambos casos, movemos HEAD para indicar cometer A , pero la forma en que lo hacemos es muy diferente. reset moverá la rama HEAD a los puntos, mover la HEAD para apuntar a otra rama.

2019

134
03 сент. La respuesta se da VonC 03 sep. 2010-09-03 23:29 '10 a las 23:29 2010-09-03 23:29

En su forma más simple, reset restablece el índice sin tocar el árbol de trabajo, y la checkout cambia el árbol de trabajo sin tocar el índice.

Restablece el índice según HEAD , el árbol de procesamiento permanece en reposo:

 git reset 

Conceptualmente, esto comprueba el índice en el árbol de trabajo. Para que realmente haga algo, debe usar -f para sobrescribir cualquier cambio local. Esta es una función de seguridad para garantizar que la forma "sin argumentos" no sea destructiva:

 git checkout 

Tan pronto como comience a agregar parámetros, es cierto que hay cierta superposición.

border=0

checkout suele utilizar con una rama, etiqueta o confirmación. En este caso, restablecerá HEAD y el índice para el compromiso dado, así como también realizará una verificación de índice en el árbol de trabajo.

Además, si envía --hard para reset , puede pedir reset sobrescribir el árbol de trabajo, así como restablecer el índice.

Si actualmente tiene una sucursal en la lista, hay un valor clave entre el reset y la checkout cuando se proporciona una sucursal o confirmación alternativa. reset cambiará la rama actual a un punto en la confirmación seleccionada, mientras que la verificación dejará solo la rama actual, pero comprobará la rama enviada o en su lugar.

Otras formas de reset y commit incluyen rutas de envío.

Si envía las rutas para reset , no puede establecer --hard , y reset solo cambiará la versión de índice de las rutas proporcionadas a la versión en la confirmación suministrada (o HEAD , si no especifica una confirmación).

Si envía rutas de checkout , como reset , actualiza la versión de índice de las rutas proporcionadas de acuerdo con el compromiso (o HEAD ) proporcionado, pero siempre verificará la versión de índice de las rutas especificadas en el árbol de trabajo.

53
03 сент. Respuesta dada por Charles Bailey 03 sep. 2010-09-03 23:43 '10 a las 23:43 2010-09-03 23:43

Un caso de uso simple al devolver un cambio:
1. Use restablecer si desea cancelar la instalación del archivo modificado.
2. Use checkout si desea deshacer los cambios en un archivo / s desinstalado.

8
28 янв. Respuesta dada por John Doe 28 de enero 2016-01-28 05:54 '16 a las 5:54 2016-01-28 05:54

Atlassian nos da una gran explicación sobre el restablecimiento de git, la comprobación de git y, por lo tanto, las devoluciones de git. Este artículo explica las diferentes aplicaciones de estos comandos en diferentes niveles: el archivo, la instantánea entregada y la confirmación.

https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting

5
21 марта '15 в 18:55 2015-03-21 18:55 Rochadsouza da la respuesta el 21 de marzo de '15 a las 18:55 2015-03-21 18:55

Los dos comandos (reset y checkout) son completamente diferentes.

checkout X NO reset --hard X

Si X es el nombre de una rama, el checkout X cambiará la rama actual y el reset --hard X no lo reset --hard X .

3
11 сент. La respuesta se da wiki1000 11 de septiembre. 2015-09-11 19:01 '15 a las 19:01 2015-09-11 19:01

Otras preguntas sobre las etiquetas de o haga una pregunta