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/abranch
creerà mybranch
e seguiràorigin/abranch
git checkout --track origin/abranch
creerà 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.defaultRemote
variabile di configurazione, useremo quello a scopo di chiarimento delle ambiguità, anche se <branch>
non è univoco in tutti i telecomandi.
Impostalo ad es. checkout.defaultRemote=origin
Per 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
branch
al 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>.remote
e branch.<name>.merge
) in modo che git pull
si uniscano in modo appropriato dal ramo di tracciamento remoto.
Questo comportamento può essere modificato tramite il branch.autosetupmerge
flag di configurazione globale . Tale impostazione può essere sovrascritta utilizzando la --track
e --no-track
le opzioni, e ha cambiato in seguito utilizzando git branch --set-upstream-to
.
E git checkout --track origin/branch
farà 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-upstream
e 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 status
egit 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=origin
al 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.