¿Qué hay checkout
en git?
Sé que una vez que lo haces checkout
con una rama en particular, los HEAD
puntos apuntan a esa rama. ¿Pero qué significa realmente? ¿Significa que luego puedo trabajar en esa rama? Si es así, entonces, sin verificar una rama, ¿no puedo trabajar en ella?
Además, ¿qué remote checkout
significa? ¿Qué utilidad tiene?
git
git-checkout
daehaai
fuente
fuente
Respuestas:
Como notó,
HEAD
es una etiqueta que indica dónde se encuentra en el árbol de confirmación. Se mueve contigo cuando pasas de un compromiso a otro.git checkout <commit>
es el mecanismo básico para moverse en el árbol de confirmación, moviendo su foco (HEAD
) a la confirmación especificada.La confirmación puede ser especificado por cualquiera de un número de maneras, cometer de hash, nombre de la sucursal, nombre de la etiqueta, la sintaxis relativa (
HEAD^
,HEAD~1
, etc.) y así sucesivamente. A menudo es útil considerar que un checkout está cambiando de sucursal, y hay algunas opciones que funcionan desde esa perspectiva, pero todas hacen referencia a confirmaciones.Verificar una confirmación tiene algunos efectos secundarios además de moverse
HEAD
.-b
opción, se creará una nueva rama basada en la confirmación actual y luego se activará.--track
opción, la rama extraída puede ser consciente de una rama remota--orphan
opción se crea una nueva rama (como con-b
) pero no se basará en ninguna confirmación existente.Hay algunas opciones más, sobre las que puede leer en la página de manual de git checkout , todas las cuales giran en torno al movimiento de un compromiso a otro, simplemente variando el efecto que tiene ese movimiento además de moverse
HEAD
.fuente
git checkout <commit> <path>
no cambia de rama.git checkout <path>
.Permítanme explicar algunos casos de uso de pago con archivo, carpeta y ramas para que pueda ser útil para comprender.
Digamos que tenemos una carpeta nombrada
dev
yindex.html
también se realiza un seguimiento de todo y el directorio de trabajo está limpio.Si cambio accidentalmente el nombre del archivo
index.html
y quiero deshacer eso, simplementegit checkout index.html
lo usaré, recuperará el estado del archivo de la rama actualmente seleccionada del repositorio.Ahora, si hice algún cambio en la
dev
carpeta y quiero recuperarlo. Puedo usarlo,git checkout dev
pero ¿qué pasa si ya hay una rama nombrada endev
lugar de verificar esa carpeta? Para evitar eso, preferiría hacerlogit checkout -- dev
.Ahora aquí, el doble guión desnudo representa la rama actual y le pide a git la carpeta
dev
de la rama seleccionada actualmente.De manera similar, si lo hago
git checkout alpha dev
, desplegará la carpeta dev de la rama alfa.Esta respuesta es para su primera pregunta 'git checkout realmente significa'.
fuente
"Para verificar" significa que toma cualquier confirmación del repositorio y vuelve a crear el estado del archivo asociado y el árbol de directorios en el directorio de trabajo.
Cuando revisa una confirmación que no es una cabeza de rama (p
git checkout HEAD~2
. Ej. ), Está en una llamada cabeza separada . Puede crear confirmaciones aquí, pero una vez que cambie a una rama diferente, esas confirmaciones no serán recuperables por un nombre de rama e incluso podrían ser eliminadas por el recolector de basura después de un tiempo.fuente