O que significa git push -u?

323

Eu tenho duas versões diferentes do git. Na versão 1.6.2, git pushnão tem a -uopção Ele aparece apenas na versão 1.7.x.

Dos documentos, o -uestá relacionado à variável

branch.<name>.merge

no git config. Essa variável é descrita abaixo:

Defines, together with branch.<name>.remote, the upstream branch 
for the given branch. It tells git fetch/git pull which branch to merge.

O que é um ramo upstream?

Frankie Ribery
fonte

Respostas:

360

"Upstream" se refere ao repositório principal de onde outras pessoas serão contratadas, por exemplo, seu repositório GitHub. A opção -u define automaticamente o upstream para você, vinculando seu repositório a um central. Dessa forma, no futuro, o Git "sabe" para onde você deseja enviar e para onde deseja obter, para poder usar git pullou git pushsem argumentos. Um pouco abaixo, este artigo explica e demonstra esse conceito.

Rafe Kettler
fonte
19
Vejo que o artigo ao qual você se vinculou aponta isso, mas como é uma pegadinha, acho que vale a pena ressaltar que o ramo para o qual é enviado git push não é afetado pela configuração do ramo upstream, a menos que você tenha push.defaultdefinido para tracking(ou upstreamem versões posteriores do git).
Mark Longair
Eu não entendo por que eclipse egit oferece os dois então?
HaveAGuess
23
@HaveAGuess Provavelmente pela mesma razão que o Eclipse também oferece miséria e desespero.
Twiz
9

Isso não está mais atualizado!

Push.default is unset; its implicit value has changed in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the traditional behavior, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

When push.default is set to 'matching', git will push local branches
to the remote branches that already exist with the same name.

Since Git 2.0, Git defaults to the more conservative 'simple'
behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.
Peter Piper
fonte
1
Mas o que significa flag -uagora? Ele ainda é recomendado por GitHub para usar esta bandeira quando criamos um novo repo ...
Jean Paul
8
@JeanPaul - A opção -u faz o seguinte: Para cada ramificação atualizada ou enviada com êxito, adicione uma referência upstream (rastreamento), usada pelo git-pull sem argumentos e outros comandos. Portanto, depois de pressionar sua ramificação local com a opção -u, essa ramificação local será automaticamente vinculada à ramificação remota, e você pode usar o git pull sem argumentos.
Peter Piper