Os dois comandos têm o mesmo efeito ( graças à resposta de Robert Siemer por apontá-lo ).
A diferença prática ocorre ao usar um ramo local chamado de forma diferente :
git checkout -b mybranch origin/abranch
criará mybranch
e acompanharáorigin/abranch
git checkout --track origin/abranch
criará apenas ' abranch
', não um ramo com um nome diferente.
(Ou seja, como comentado por Sebastian Graf , se a filial local já não existisse.
Se existisse , você precisaria git checkout -B abranch origin/abranch
)
Nota: com o Git 2.23 (terceiro trimestre de 2019), isso usaria o novo comandogit switch
:
git switch -c <branch> --track <remote>/<branch>
Se a ramificação existir em vários controles remotos e um deles for nomeado pela checkout.defaultRemote
variável de configuração, usaremos esse para fins de desambiguação, mesmo que <branch>
não seja exclusivo em todos os controles remotos.
Configure-o como, por exemplo, checkout.defaultRemote=origin
para sempre fazer check-out de filiais remotas a partir daí, se <branch>
for ambíguo, mas existir no controle remoto 'origem'.
Aqui, ' -c
' é o novo ' -b
'.
Primeiro, alguns antecedentes: Rastrear significa que uma filial local tem seu upstream definido como uma filial remota:
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch
vai:
- criar / redefinir
branch
para o ponto referenciado por origin/branch
.
- crie a ramificação
branch
(com git branch
) e acompanhe a ramificação de rastreamento remoto origin/branch
.
Quando uma ramificação local é iniciada em uma ramificação de rastreamento remoto, o Git configura a ramificação (especificamente as entradas branch.<name>.remote
e de branch.<name>.merge
configuração) para que git pull
se fundam adequadamente a partir da ramificação de rastreamento remoto.
Esse comportamento pode ser alterado através do branch.autosetupmerge
sinalizador de configuração global . Essa configuração pode ser substituído usando o --track
e --no-track
opções, e mudou mais tarde usando git branch --set-upstream-to
.
E git checkout --track origin/branch
fará o mesmo 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
Também definiria o upstream para ' branch
'.
(Nota: o git1.8.0 será descontinuado git branch --set-upstream
e substituirá por git branch -u|--set-upstream-to
: consulte anúncio do git1.8.0-rc1 )
Ter uma filial upstream registrada para uma filial local:
- diga ao git para mostrar a relação entre os dois ramos em
git status
egit branch -v
.
- direciona
git pull
sem argumentos para extrair do upstream quando o novo ramo é retirado .
Consulte " Como você faz com que uma ramificação git existente rastreie uma ramificação remota? " Para obter mais informações.
git pull
que alguns galhos me permitiam , enquanto alguns pediam um galho remoto. Acontece que, se você, pela primeira vez, está verificando uma ramificação remota criada por seu colega, o git continua e adicionabranch.<BNAME>.remote=origin
ao gitconfig local. O que lhe permite emitirgit pull
. No entanto, se você é o responsável pela criação da ramificaçãogit checkout -b BNAME
, o git, é claro, não sabe. Então você deve especificar seu controle remoto.