Los dos comandos tienen el mismo efecto ( gracias a la respuesta de Robert Siemer por señalarlo ).
La diferencia práctica viene cuando se usa una sucursal local con un nombre diferente :
git checkout -b mybranch origin/abranch
creará mybranch
y rastrearáorigin/abranch
git checkout --track origin/abranch
solo creará ' abranch
', no una rama con un nombre diferente.
(Es decir, como se ha comentado por Sebastián Graf , si la rama local hizo no existe.
Si lo hiciera, sería necesario git checkout -B abranch origin/abranch
)
Nota: con Git 2.23 (Q3 2019), eso usaría el nuevo comandogit switch
:
git switch -c <branch> --track <remote>/<branch>
Si la rama existe en múltiples controles remotos y uno de ellos es nombrado por la checkout.defaultRemote
variable de configuración, usaremos ese para propósitos de desambiguación, incluso si <branch>
no es único en todos los controles remotos.
Póngalo en, por ejemplo, checkout.defaultRemote=origin
para retirar siempre ramas remotas desde allí si <branch>
es ambiguo pero existe en el control remoto 'origen'.
Aquí, " -c
es lo nuevo -b
".
Primero, algunos antecedentes: el seguimiento significa que una sucursal local tiene su conjunto ascendente en una sucursal remota:
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch
será:
- crear / restablecer
branch
al punto al que hace referencia origin/branch
.
- cree la rama
branch
(con git branch
) y rastree la rama de seguimiento remoto origin/branch
.
Cuando una rama local se ubicó en una rama a distancia de seguimiento, Git establece la rama (específicamente el branch.<name>.remote
y branch.<name>.merge
entradas de configuración) para que git pull
se apropiadamente combinar de la rama a distancia de seguimiento.
Este comportamiento puede modificarse mediante el branch.autosetupmerge
indicador de configuración global . Esa configuración se puede anular mediante el uso de la --track
y --no-track
opciones, y cambió más tarde usando git branch --set-upstream-to
.
Y git checkout --track origin/branch
hará lo mismo que git branch --set-upstream-to
):
# or, since 1.7.0
git branch --set-upstream upstream/branch branch
# or, since 1.8.0 (October 2012)
git branch --set-upstream-to upstream/branch branch
# the short version remains the same:
git branch -u upstream/branch branch
También establecería el flujo ascendente para ' branch
'.
(Nota: git1.8.0 dejará de funcionar git branch --set-upstream
y lo reemplazará con git branch -u|--set-upstream-to
: vea el anuncio de git1.8.0-rc1 )
Tener una sucursal aguas arriba registrada para una sucursal local:
- dile a git muestre la relación entre las dos ramas en
git status
ygit branch -v
.
- dirige
git pull
sin argumentos para extraer del flujo ascendente cuando se extrae la nueva rama .
Consulte " ¿Cómo hacer que una rama git existente rastree una rama remota? " Para obtener más información.
git pull
, mientras que algunas ramas me pedían una rama remota de la que sacar. Resulta que si usted, por primera vez, está revisando una rama remota que creó su par, git continúa y se agregabranch.<BNAME>.remote=origin
al gitconfig local. Lo que luego te permite emitirgit pull
. Sin embargo, si usted es el que crea la ramagit checkout -b BNAME
, entonces git -por supuesto- no lo sabe. Por lo tanto, debe especificar su control remoto.