¿Qué es una rama de seguimiento y para qué sirve la bandera `-u` al hacer push?
Ver respuesta — intenta responderla en voz alta primero
Una rama de seguimiento (tracking branch) es una rama local vinculada a una rama remota, su upstream. Ese vínculo permite usar git push y git pull sin escribir el remoto ni la rama cada vez. La bandera -u (o --set-upstream) crea ese vínculo la primera vez que subes una rama.
Cuando tu rama local sabe a qué rama remota corresponde, Git puede hacer varias cosas por ti:
git pushsin argumentos sabe a dónde subir.git pullsin argumentos sabe de dónde bajar.git statuste dice "estás 2 commits adelante / 1 detrás deorigin/main".
Ese vínculo se llama upstream. Se establece la primera vez con git push -u origin nombre-rama. La -u es un atajo de --set-upstream: "recuerda que esta rama local sigue a esta rama remota". Después ya no hace falta repetir el remoto ni la rama.
# Primera vez que subes una rama nueva: crea el vínculo con -u
git switch -c mi-feature
git push -u origin mi-feature
# Ahora mi-feature local sigue a origin/mi-feature
# A partir de aquí, basta con:
git push # sabe que va a origin/mi-feature
git pull # sabe de dónde traer
# Ver qué upstream tiene cada rama
git branch -vv
# * mi-feature 1a2b3c4 [origin/mi-feature] Agrega login
# main 5d6e7f8 [origin/main] Version inicial
# Establecer el upstream de una rama ya existente
git branch --set-upstream-to=origin/mi-feature
Olvidar la -u la primera vez y que Git responda con un error tipo "fatal: The current branch has no upstream branch", sin saber por qué. La solución es hacer git push -u origin nombre-rama la primera vez. Otro error es creer que hay que poner -u en todos los push: solo hace falta una vez, para crear el vínculo.
"Una rama de seguimiento es una rama local vinculada a una rama remota, su upstream. Ese vínculo hace que
git pushygit pullsepan a dónde ir sin que yo escriba el remoto y la rama cada vez, y quegit statusme diga cuántos commits estoy adelante o detrás. El vínculo se crea la primera vez congit push -u origin nombre-rama; la-ues--set-upstream. Después ya solo hagogit pushogit pulla secas."
Creaste una rama local nueva feature-x y haces git push a secas. Git responde con un error de "no upstream branch". ¿Qué comando lo arregla?
Ver respuesta
git push -u origin feature-x. La rama nueva todavía no tiene un upstream (ninguna rama remota asociada), así que Git no sabe a dónde subirla. La -u (--set-upstream) crea el vínculo con origin/feature-x, y a partir de ese momento basta con git push y git pull a secas.