Est-ce que quelqu'un sait la différence entre ces deux commandes pour basculer et suivre une branche distante?
git checkout -b branch Origin/branch
git checkout --track Origin/branch
Je pense que les deux gardent une trace de la branche distante pour que je puisse appliquer mes modifications à la branche sur Origin, non?
Y a-t-il des différences pratiques ??
Merci!
Les deux commandes ont le même effet ( merci à Robert Siemer de l’avoir signalé ).
La différence pratique vient de l’utilisation d’une branche locale nommée autrement:
git checkout -b mybranch Origin/abranch
_ créera mybranch
et suivra _Origin/abranch
_git checkout --track Origin/abranch
_ ne créera que 'abranch
', et non une branche avec un nom différent.(C'est-à-dire comme indiqué par Sebastian Graf , si la branche locale existait déjà not existait déjà.
Si c'était le cas, vous auriez besoin de _git checkout -B abranch Origin/abranch
_)
Note: avec Git 2.23 (Q3 2019), cela utiliserait le nouvelle commande _git 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 variable de configuration _
checkout.defaultRemote
_, nous l'utiliserons aux fins de la désambiguïsation, même si la _<branch>
_ n'est pas unique dans toutes les télécommandes. .
Réglez-le sur p. Ex. _checkout.defaultRemote=Origin
_ pour toujours extraire les branches distantes à partir de là si _<branch>
_ est ambigu, mais existe sur la télécommande 'Origin'.
Ici, '_-c
_' est le nouveau '_-b
_'.
Tout d’abord, quelques antécédents: Suivi signifie qu’une branche locale a son groupe en 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
_ va:
branch
jusqu'au point référencé par _Origin/branch
_.branch
(avec git branch
) et suivez la branche de suivi distante _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
_) afin que _git pull
_ soit correctement fusionné à partir de la branche de suivi à distance.
Ce comportement peut être modifié via l'indicateur de configuration global _branch.autosetupmerge
_. Ce paramètre peut être remplacé à l'aide des options _--track
_ et _--no-track
_, puis modifié ultérieurement à l'aide de git branch _--set-upstream-to
_.
Et _git checkout --track Origin/branch
_ fera la même chose 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 va déconseiller _git branch --set-upstream
_ et le remplacer par _git branch -u|--set-upstream-to
_: voir annonce git1.8.0-rc1 )
Avoir une succursale en amont enregistrée pour une succursale locale:
git status
_ et _git branch -v
_ .git pull
_ sans arguments à extraire de l'amont lorsque la nouvelle branche est extraite .Voir " Comment faire en sorte qu'une branche git existante suive une branche distante? " pour plus d'informations.
Il n'y a pas de différence du tout!
1) git checkout -b branch Origin/branch
S'il n'y a ni --track
ni --no-track
, --track
est utilisé par défaut. La valeur par défaut peut être modifiée avec le paramètre branch.autosetupmerge
.
En effet, 1) se comporte comme git checkout -b branch --track Origin/branch
.
2) git checkout --track Origin/branch
“Par commodité”, --track
sans -b
implique -b
et l'argument de -b
est supposé être “branche”. La conjecture est pilotée par la variable de configuration remote.Origin.fetch
.
En effet, 2) se comporte comme git checkout -b branch --track Origin/branch
.
Comme vous pouvez le voir: pas de différence.
Mais ça va encore mieux:
3) git checkout branch
est également équivalent à git checkout -b branch --track Origin/branch
si "branche" n'existe pas encore mais "Origine/branche" n'existe pas1.
Les trois commandes définissent le "amont" de "branche" sur "Origine/branche" (ou échouent).
Upstream est utilisé comme point de référence de l'argument sans argument git status
, git Push
, git merge
et donc git pull
(s'il est configuré comme cela (qui est la valeur par défaut ou presque la valeur par défaut)) .
Par exemple. git status
vous indique à quelle distance vous êtes en amont ou en amont, le cas échéant.
git Push
est configuré pour pousser la branche actuelle en amont par défaut2 depuis git 2.0.
1 ... et si “Origin” est la seule télécommande ayant “branche”
2 la valeur par défaut (nommée "simple") également impose que les deux noms de branche soient égaux
Le livre semble indiquer que ces commandes produisent le même effet:
Le cas simple est l'exemple que vous venez de voir, exécutant git checkout -b [branche] [nom_sélection]/[branche]. Si vous avez Git version 1.6.2 ou ultérieure, vous pouvez également utiliser le raccourci --track:
$ git checkout --track Origin/serverfix
Branch serverfix set up to track remote branch serverfix from Origin.
Switched to a new branch 'serverfix'
Pour configurer une branche locale avec un nom différent de celui de la branche distante, vous pouvez facilement utiliser la première version avec un nom de branche local différent:
$ git checkout -b sf Origin/serverfix
C'est particulièrement pratique lorsque vos finitions git bash ou oh-my-zsh sont en mesure de tirer le nom Origin/serverfix
- ajoutez simplement --track
(ou -t
) et vous êtes sur votre chemin.