¿Cuáles son los conceptos git de HEAD, master, origin?

197

A medida que aprendo sobre git, sigo encontrando los términos HEAD, master, origin, y no estoy seguro de cuáles son las diferencias. Si entiendo correctamente, ¿HEAD es siempre igual a la última revisión? Y si es así, ¿es esa la última revisión de todo el repositorio, o de una rama o etiqueta específica? Esto es muy confuso. He leído muchos tutoriales sobre esto y cosas como ramificar / fusionar, pero aún así no puedo entenderlo.

usuario779159
fuente

Respuestas:

232

Recomiendo el libro "Pro Git" de Scott Chacon . Tómese el tiempo y léalo realmente, mientras explora un repositorio git real mientras lo hace.

HEAD : la confirmación actual de su repositorio está activada. La mayoría de las veces HEADapunta a la última confirmación en su rama actual, pero ese no tiene que ser el caso. HEADrealmente solo significa "a qué apunta mi repositorio actualmente".

En el caso de que la confirmación se HEADrefiera no es la punta de ninguna rama, esto se denomina "cabeza separada".

master : el nombre de la rama predeterminada que git crea para ti cuando creas un repositorio por primera vez. En la mayoría de los casos, "maestro" significa "la rama principal". La mayoría de las tiendas tienen a todos presionando para dominar, y el maestro se considera la vista definitiva del repositorio. Pero también es común que las ramas de lanzamiento estén hechas de master para el lanzamiento. Su repositorio local tiene su propia rama maestra, que casi siempre sigue al maestro de un repositorio remoto.

origen : el nombre predeterminado que git le da a su repositorio remoto principal. Su caja tiene su propio repositorio, y lo más probable es que busque un repositorio remoto al que usted y todos sus compañeros de trabajo lo hagan. Ese repositorio remoto casi siempre se llama origen, pero no tiene que ser así.

HEADEs una noción oficial en git. HEADsiempre tiene un significado bien definido. mastery originson nombres comunes generalmente usados ​​en git, pero no tienen que serlo.

Matt Greer
fuente
¿Qué quiere decir con "HEAD" en realidad significa "a qué apunta actualmente mi repositorio"? Si hay varias ramas en un repositorio, ¿cuál es la CABEZA según usted? si hay 3 ramas (junto con el maestro), y se realizó un compromiso de necesidad en la rama A, el HEAD aún puede estar en el compromiso del 'maestro'. Entonces, ¿cuál es la revisión que apunta el repositorio ahora?
OK999
2
no está claro qué quiere decir con repositorio (local o remoto). En general, su respuesta usa expresiones, sin explicarlas antes.
Acabo de hacer un clon en un directorio paralelo para comparar mi directorio de trabajo con la punta del repositorio remoto. Así de buenas son todas las respuestas de git.
@JingHe ¿Leíste todo el libro? ¿Realmente vale la pena? Quiero decir que estamos hablando de más de 500 páginas leídas, eso me parece demasiado ...
Max
1
Para verificar que entiendo la lógica, puedo llamar a una rama remota como característica A y cuando presiono a esa rama, escribo "característica de origen de inserción gitA". También puedo hacer lo mismo desde el control remoto diciendo "git pull origin featureA", hacer cambios. Y la cabeza solo se refiere a la copia local. @ OK999 Creo que HEAD está apuntando a cualquier sucursal que esté revisada en el momento en el local. Si la confirmación se realizó en la rama A pero actualmente está en la rama B, el HEAD está apuntando a la rama B. Debe mover la CABEZA a la rama A antes de realizar una confirmación particular.
TLee
43

HEADNo es la última revisión, es la revisión actual . Por lo general, es la última revisión de la rama actual, pero no tiene que ser así.

master es un nombre comúnmente dado a la rama principal, pero podría llamarse de otra manera (o no podría haber una rama principal).

origines un nombre comúnmente dado al control remoto principal. Remote es otro repositorio desde el que puede extraer y empujar. Por lo general, está en algún servidor, como github.

svick
fuente
1
¿Puedes dar un ejemplo de cuándo HEAD es actual pero no el último? Nunca he visto eso antes. ¿O quiere decir que podría no ser la última porque su rama está detrás de la rama remota que está rastreando?
Matt Greer
12
@MattGreer: si revisa algo más antiguo (como una etiqueta como git checkout v1.1), entonces su HEAD cambia al compromiso de esa etiqueta. Puede que no sea la última confirmación.
Greg Hewgill
8

Si bien esto no responde directamente a la pregunta, hay un gran libro disponible de forma gratuita que lo ayudará a aprender los conceptos básicos llamados ProGit . Si prefiere la versión de madera muerta a una colección de bits, puede comprarla en Amazon .

Piotr Perak
fuente
9
¡La pregunta no pedía un libro! Todavía no me queda claro por qué necesitaría un libro para git, cuando no necesito uno para C ++.
13
Solo piensa que no necesita un libro para C ++;)
Piotr Perak