Diferencia entre git checkout origin track origin / branch y git checkout - b branch origin / branch
¿Alguien conoce la diferencia entre estos dos comandos para cambiar y rastrear una rama remota?
git checkout -b branch origin/branch
git checkout --track origin/branch
Creo que ambos realizan un seguimiento de la rama remota para que pueda enviar mis cambios a la rama en origen, ¿verdad?
¿Hay alguna diferencia práctica??
Gracias!
3 answers
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 rama local llamada diferentemente :
-
{[2] } creará
mybranch
y rastrearáorigin/abranch
-
git checkout --track origin/abranch
solo creará 'abranch
', no una rama con un nombre diferente.
(Es decir, como comentó por Sebastian Graf , si la rama local existiera no ya.
Si lo hiciera, necesitarías git checkout -B abranch origin/abranch
)
Primero, algunos antecedentes: Seguimiento significa que una rama local tiene su upstream establecido en una rama remota:
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch
will
- crear/restablecer
branch
al punto referenciado pororigin/branch
. - crear la rama
branch
(congit branch
) y rastrea la rama de seguimiento remotoorigin/branch
.
Cuando se inicia una rama local desde una rama de seguimiento remoto, Git configura la rama (específicamente las entradas de configuración
branch.<name>.remote
ybranch.<name>.merge
) para quegit pull
se combine apropiadamente desde la rama de seguimiento remoto.
Este comportamiento se puede cambiar a través del indicador de configuración globalbranch.autosetupmerge
. Esta configuración puede ser anulada usando las opciones--track
y--no-track
, y cambiada más tarde usando git branch--set-upstream-to
.
Y git checkout --track origin/branch
hará lo mismo:
# or, since 1.7.0
git branch --set-upstream branch upstream/branch
# or, since 1.8.0 (October 2012)
git branch --set-upstream-to branch upstream/branch
# the short version remains the same:
git branch -u branch upstream/branch
También establecería el upstream para 'branch
'.
(Nota: git1.8.0 desaprobar git branch --set-upstream
y reemplazarlo con git branch -u|--set-upstream-to
: ver git1.8.0-rc1 anunciar)
Tener una rama ascendente registrada para una rama local:
- dile a git que muestre la relación entre las dos ramas en
git status
ygit branch -v
. - dirige
git pull
sin argumentos para extraer desde el upstream cuando la nueva rama es extraída.
Ver " Cómo hacer una rama git existente ¿rastrear una rama remota?" para más.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-17 13:20:39
¡No hay ninguna diferencia!
1) git checkout -b branch origin/branch
Si no --track
y no --no-track
, --track
se asume como predeterminado. El valor predeterminado se puede cambiar con la configuración branch.autosetupmerge
.
En efecto, 1) se comporta como git checkout -b branch --track origin/branch
.
2) git checkout --track origin/branch
"Como una conveniencia", --track
sin -b
implica -b
y el argumento a -b
se supone que es "rama". La conjetura es conducida por la variable de configuración remote.origin.fetch
.
En efecto, 2) se comporta como git checkout -b branch --track origin/branch
.
Como puedes ver: no hay diferencia.
, Pero se pone aún mejor:
3) git checkout branch
También es equivalente a git checkout -b branch --track origin/branch
si " branch "no existe todavía pero" origin/branch " sí1.
Los tres comandos establecen el "upstream" de "branch" como "origin/branch" (o fallan).
Upstream se utiliza como punto de referencia de argument-less git status
, git push
, git merge
y así git pull
(si se configura así (que es el valor predeterminado o casi el valor predeterminado)).
Por ejemplo, git status
le indica qué tan atrás o adelantado está de upstream, si hay uno configurado.
git push
está configurado para empujar la rama corriente arriba de forma predeterminada2 desde git 2.0.
1 ...y si "origin" es el único control remoto que tiene "branch"
2 el valor predeterminado (llamado "simple") también impone que ambos nombres de rama sean iguales
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-26 14:22:02
El libro parece indicar que esos comandos producen el mismo efecto:
El caso simple es el ejemplo que acaba de ver, ejecutando git checkout-b [rama] [remotename]/[rama]. Si tienes Git versión 1.6.2 o más tarde, también puede usar la abreviatura track track:
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
Para configurar una rama local con un nombre diferente rama remota, puede utilizar fácilmente la primera versión con un diferente sucursal local nombre:
$ git checkout -b sf origin/serverfix
Eso es particularmente útil cuando tus terminaciones de git bash o oh-my-zsh son capaces de extraer el nombre origin/serverfix
por ti - solo agrega --track
(o -t
) y ya estás en camino.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-14 15:12:24