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/abranchcreará mybranchy rastrearáorigin/abranch
git checkout --track origin/abranchsolo 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.defaultRemotevariable 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=originpara retirar siempre ramas remotas desde allí si <branch>es ambiguo pero existe en el control remoto 'origen'.
Aquí, " -ces 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
branchal 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>.remotey branch.<name>.mergeentradas de configuración) para que git pullse apropiadamente combinar de la rama a distancia de seguimiento.
Este comportamiento puede modificarse mediante el branch.autosetupmergeindicador de configuración global . Esa configuración se puede anular mediante el uso de la --tracky --no-trackopciones, y cambió más tarde usando git branch --set-upstream-to.
Y git checkout --track origin/branchhará 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-upstreamy 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 statusygit 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=original 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.