¿Alguien puede explicar una "rama de seguimiento" como se aplica a git?
Aquí está la definición de git-scm.com :
Una 'rama de seguimiento' en Git es una rama local que está conectada a una rama remota. Cuando empuja y tira de esa rama, automáticamente empuja y tira hacia la rama remota con la que está conectada.
Use esto si siempre tira de la misma rama ascendente a la nueva rama, y si no desea usar "git pull" explícitamente.
Desafortunadamente, al ser nuevo en git y venir de SVN, esa definición no tiene absolutamente ningún sentido para mí.
Estoy leyendo " La guía pragmática de Git " (gran libro, por cierto), y parecen sugerir que rastrear ramas es algo bueno y que después de crear su primer control remoto (origen, en este caso), debería configure su rama maestra para que sea una rama de rastreo, pero desafortunadamente no cubre por qué una rama de rastreo es algo bueno o qué beneficios obtiene al configurar su rama maestra para que sea una rama de rastreo de su repositorio de origen .
¿Puede alguien por favor iluminarme (en inglés)?
fuente
--track
opción para crear una rama (local) que tenga una de estas ramas de seguimiento remoto configurada como ascendente . La terminología ha evolucionado algo entre 2006 y 2019, por lo que diferentes personas a veces pueden significar algo diferente con cada una de estas palabras.origin/master
: están en su repositorio, pero son la forma en que su Git recuerda los nombres de las ramas como se ve en algún otro repositorio de Git enorigin
. Si luego usa la palabra upstream , que es el término más moderno, para decir quemaster
haorigin/master
establecido como upstream , puede evitar toda esta confusión de terminología.Respuestas:
El libro ProGit tiene una muy buena explicación :
Rastreo de ramas
Retirar una rama local desde una rama remota crea automáticamente lo que se llama una rama de seguimiento. Las ramas de seguimiento son ramas locales que tienen una relación directa con una rama remota. Si está en una rama y tipo de seguimiento
git push
, Git sabe automáticamente a qué servidor y rama presionar. Además, la ejecucióngit pull
mientras se encuentra en una de estas ramas recupera todas las referencias remotas y luego se fusiona automáticamente en la rama remota correspondiente.Cuando clona un repositorio, generalmente crea automáticamente una rama maestra que rastrea el origen / maestro. Es por eso
git push
ygit pull
trabajar fuera de la caja sin otros argumentos. Sin embargo, puede configurar otras ramas de rastreo si lo desea, las que no rastrean ramas en origen y no rastrean la rama maestra. El caso simple es el ejemplo que acabas de ver, corriendogit checkout -b [branch] [remotename]/[branch]
. Si tiene Git versión 1.6.2 o posterior, también puede usar la--track
taquigrafía:Para configurar una sucursal local con un nombre diferente al de la sucursal remota, puede usar fácilmente la primera versión con un nombre de sucursal local diferente:
Ahora, su sucursal local
sf
automáticamente empujará hacia y desdeorigin/serverfix
.BONIFICACIÓN:
git status
información extraCon una bifurcación de seguimiento,
git status
le dirá si está detrás de su bifurcación de seguimiento, ¡útil para recordarle que aún no ha presionado sus cambios! Se parece a esto:o
fuente
A continuación se encuentran mis notas de aprendizaje personales sobre las ramas de seguimiento de GIT, espero que sea útil para futuros visitantes:
Rastreo de ramas y "git fetch":
fuente
El libro Pro Git menciona :
No exactamente. La pregunta SO " Tener dificultades para comprender
git-fetch
" incluye:Pero en realidad, una vez que establece una relación de rama ascendente entre:
master
origin/master
Luego puede considerarlo
master
como una rama de seguimiento local : rastrea la rama de seguimiento remotaorigin/master
que, a su vez, rastrea la rama maestra del repositorio ascendenteorigin
.fuente
git status
recibiré un mensaje de seguimiento de confirmación con respecto a los repositorios originales y ascendentes? (Configuración: cloné el repositorio de alguien localmente, empujé mi clon a un nuevo repositorio en mi cuenta de GitHub y configuré localmente los controles remotos de origen y aguas arriba de mi repositorio de github y el repositorio clonado respectivamente)Así fue como agregué una rama de seguimiento para poder extraerla de mi nueva rama:
fuente