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/abranchcriará mybranche acompanharáorigin/abranch
git checkout --track origin/abranchcriará 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.defaultRemotevariá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=originpara 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
branchpara 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>.remotee de branch.<name>.mergeconfiguração) para que git pullse fundam adequadamente a partir da ramificação de rastreamento remoto.
Esse comportamento pode ser alterado através do branch.autosetupmergesinalizador de configuração global . Essa configuração pode ser substituído usando o --tracke --no-trackopções, e mudou mais tarde usando git branch --set-upstream-to.
E git checkout --track origin/branchfará 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-upstreame 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 statusegit 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 pullque 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=originao 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.