I due comandi hanno lo stesso effetto ( grazie alla risposta di Robert Siemer per averlo sottolineato ).
La differenza pratica viene quando si utilizza un ramo locale denominato in modo diverso :
git checkout -b mybranch origin/abranchcreerà mybranche seguiràorigin/abranch
git checkout --track origin/abranchcreerà solo ' abranch', non un ramo con un nome diverso.
(Cioè, come commentato da Sebastian Graf , se la filiale locale non esistesse già. In
caso affermativo , sarebbe necessario git checkout -B abranch origin/abranch)
Nota: con Git 2.23 (3 ° trimestre 2019), si utilizza il nuovo comandogit switch :
git switch -c <branch> --track <remote>/<branch>
Se il ramo esiste in più telecomandi e uno di essi è chiamato dalla checkout.defaultRemotevariabile di configurazione, useremo quello a scopo di chiarimento delle ambiguità, anche se <branch>non è univoco in tutti i telecomandi.
Impostalo ad es. checkout.defaultRemote=originPer verificare sempre i rami remoti da lì se <branch>è ambiguo ma esiste sul telecomando 'origine'.
Qui, " -cè il nuovo -b".
Innanzitutto, alcuni retroscena: il monitoraggio indica che un ramo locale ha il suo upstream impostato su un ramo remoto:
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch volere:
- crea / resetta
branchal punto a cui fa riferimento origin/branch.
- crea il ramo
branch(con git branch) e traccia il ramo di tracciamento remoto origin/branch.
Quando un ramo locale viene avviato da un ramo di tracciamento remoto, Git imposta il ramo (in particolare le voci di configurazione branch.<name>.remotee branch.<name>.merge) in modo che git pullsi uniscano in modo appropriato dal ramo di tracciamento remoto.
Questo comportamento può essere modificato tramite il branch.autosetupmergeflag di configurazione globale . Tale impostazione può essere sovrascritta utilizzando la --tracke --no-trackle opzioni, e ha cambiato in seguito utilizzando git branch --set-upstream-to.
E git checkout --track origin/branchfarà lo stesso di 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
Impostarebbe anche l'upstream per ' branch'.
(Nota: git1.8.0 si deprecherà git branch --set-upstreame lo sostituirà con git branch -u|--set-upstream-to: vedere git1.8.0-rc1 annunciare )
Avere una filiale a monte registrata per una filiale locale:
- dì a git di mostrare la relazione tra i due rami in
git statusegit branch -v .
- dirige
git pull senza argomenti da estrarre dall'upstream quando il nuovo ramo viene estratto .
Vedere " Come si fa a tracciare un ramo git esistente come ramo remoto? " Per ulteriori informazioni.
git pull, mentre alcuni rami avrebbero chiesto un ramo remoto da cui attingere. Si scopre che se, per la prima volta, stai verificando un ramo remoto creato dal tuo peer, git continua e si aggiungebranch.<BNAME>.remote=original gitconfig locale. Che quindi ti consente di emetteregit pull. Tuttavia, se sei tu a creare il ramogit checkout -b BNAME, allora git - ovviamente - non lo sa. Quindi dovresti specificare il suo telecomando.