Différence entre la sortie git --origine de la voie / branche et la sortie git-origine de la branche b / branche

quelqu'un sait la différence entre ces deux commandes pour passer 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 pousser mes modifications sur la branche d'origine, non?

y a-t-il des différences pratiques??

Merci!

135
demandé sur Zoe 2012-04-04 02:15:53
la source

3 ответов

les deux commandes ont le même effet ( merci à la réponse de Robert Siemer pour l'avoir souligné ).

la différence pratique vient lorsque l'on utilise une branche locale appelée différemment :

  • git checkout -b mybranch origin/abranch va créer mybranch et piste origin/abranch
  • git checkout --track origin/abranch ne créera que abranch ', pas une branche avec un nom différent.

(C'est-à-dire, comme commenté par Sebastian Graf , si la branche locale pas existent déjà.

Si c'était le cas, vous auriez besoin d' git checkout -B abranch origin/abranch )


tout D'abord, certains arrière-plans: suivi signifie qu'une branche locale a son amont réglé à 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 1519310920"

  • créer/reset branch le point référencé par origin/branch .
  • créer la branche branch (avec git branch ) et suivez la branche de suivi à distance origin/branch .

Lorsqu'une branche locale est démarrée d'une branche de suivi à distance, Git met en place la branche (plus précisément les entrées de configuration branch.<name>.remote et branch.<name>.merge ) de sorte que git pull fusionne de façon appropriée à partir de la branche de suivi à distance.

Ce comportement peut être modifié via le drapeau de configuration global branch.autosetupmerge . Ce paramètre peut être annulé en utilisant les options --track et --no-track , et modifié plus tard en utilisant la branche git --set-upstream-to .


et git checkout --track origin/branch fera la même chose:

 # 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

Il y aurait également l'amont "de 151990920" '.

(Note: git1.8.0 va déprécier git branch --set-upstream et le remplacer par git branch -u|--set-upstream-to : voir git1.8.0-rc1 annonce )


ayant une succursale en amont enregistrée pour une succursale locale:

  • indiquer à git afficher le relation entre les deux branches dans git status et git branch -v .
  • dirige git pull sans arguments pour tirer de l'amont lorsque la nouvelle branche est cochée .

Voir " Comment voulez-vous faire un existant git branch suivre une branche distante? " pour plus d'.

191
répondu VonC 2017-12-17 16:20:39
la source

il n'y a aucune différence!

1) git checkout -b branch origin/branch

S'il n'y a pas de --track et de --no-track , --track est supposé 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

"commodité", --track sans -b implique -b et l'argument -b est deviné à être "branche". La devinette 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: aucune différence.

mais il obtient encore mieux:

3) git checkout branch

est également équivalent à git checkout -b branch --track origin/branch si "branche" ne existe encore mais " origine / branche "ne 1 .


les trois commandes positionnent "l'amont" de "branche" comme "origine/branche" (ou elles échouent).

en amont est utilisé comme point de référence de l'argument-moins git status , git push , git merge et donc git pull (si configuré comme cela (qui est la valeur par défaut ou presque)).

E. G. git status vous dit comment loin derrière ou en avant vous êtes de l'amont, si on est configuré.

git push est configuré pour pousser la branche courante en amont par défaut 2 depuis git 2.0.

1 ...et si "origin" est la seule télécommande ayant "branche"

2 le défaut (nommé "simple") aussi applique pour les deux noms de branche doivent être égaux

22
répondu Robert Siemer 2015-04-26 17:22:02
la source

le livre semble indiquer que ces commandes produisent le même effet:

le cas simple est l'exemple que vous venez de voir, exécuter git checkout -b [direction] [remotename]/[direction]. Si vous avez la version 1.6.2 de Git ou plus tard, vous pouvez aussi 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 créer une succursale locale avec un nom différent de celui de la branche distante, vous pouvez facilement utilisez la première version avec une nom de la succursale locale:

$ git checkout -b sf origin/serverfix

C'est particulièrement pratique quand votre bash ou oh-my-zsh git completions sont en mesure de tirer le origin/serverfix nom pour vous - il suffit d'ajouter --track (ou -t ) et vous êtes sur votre chemin.

5
répondu Pat 2014-04-14 19:12:24
la source

Autres questions sur git git-checkout branch git-branch