Les deux commandes ont le même effet ( merci à la réponse de Robert Siemer de l'avoir signalé ).
La différence pratique survient lorsque vous utilisez une branche locale nommée différemment :
git checkout -b mybranch origin/abranch
va créer mybranch
et suivreorigin/abranch
git checkout --track origin/abranch
ne créera que ' abranch
', pas une branche avec un nom différent.
(C'est, comme commenté par Sebastian Graf , si la branche locale ne pas existait déjà.
Si elle l'a fait, vous auriez besoin git checkout -B abranch origin/abranch
)
Remarque: avec Git 2.23 (Q3 2019), cela utiliserait la nouvelle commandegit switch
:
git switch -c <branch> --track <remote>/<branch>
Si la branche existe dans plusieurs télécommandes et que l'une d'entre elles est nommée par la checkout.defaultRemote
variable de configuration, nous l'utiliserons à des fins de désambiguïsation, même si la <branch>
n'est pas unique sur toutes les télécommandes.
Réglez-le par exemple checkout.defaultRemote=origin
pour toujours extraire les branches distantes de là si elles <branch>
sont ambiguës mais existent sur la télécommande «d'origine».
Ici, ' -c
' est le nouveau ' -b
'.
Tout d'abord, quelques informations de base: le suivi signifie qu'une branche locale a son ensemble amont défini sur une branche distante:
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch
volonté:
- créer / réinitialiser
branch
au point référencé par origin/branch
.
- créer la branche
branch
(avec git branch
) et suivre la branche de suivi à distance origin/branch
.
Lorsqu'une branche locale est démarrée à partir d'une branche de suivi à distance, Git configure la branche (en particulier les entrées de configuration branch.<name>.remote
et branch.<name>.merge
) de manière à git pull
fusionner de manière appropriée à partir de la branche de suivi à distance.
Ce comportement peut être modifié via l' branch.autosetupmerge
indicateur de configuration globale . Ce paramètre peut être remplacé en utilisant les --track
et les --no-track
options, et changé par la suite en utilisant git branch --set-upstream-to
.
Et git checkout --track origin/branch
fera de même 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
Cela définirait également l'amont pour ' branch
'.
(Remarque: git1.8.0 le dépréciera git branch --set-upstream
et le remplacera par git branch -u|--set-upstream-to
: voir git1.8.0-rc1 annonce )
L'enregistrement d'une succursale en amont pour une succursale locale:
- dire à git de montrer la relation entre les deux branches dans
git status
etgit branch -v
.
- ordonne
git pull
sans arguments de tirer de l'amont lorsque la nouvelle branche est extraite .
Voir " Comment faire pour qu'une branche git existante suive une branche distante? " Pour en savoir plus.
git pull
, alors que certaines succursales demandaient qu'une succursale distante soit utilisée. Il s'avère que si vous, dans votre première fois, extrayez une branche distante que votre pair a créée, git continue et ajoutebranch.<BNAME>.remote=origin
au gitconfig local. Ce qui vous permet ensuite d'émettregit pull
. Cependant, si vous êtes celui qui crée la branchegit checkout -b BNAME
, alors git-of course- ne sait pas. Vous devez donc spécifier sa télécommande.