Qual é o resultado de `git push origin`?

Eu trabalhei no meu ramo de resources local, foo. Então eu queria empurrar essa nova ramificação para a origem para que os outros pudessem trabalhar nela. A maneira normal de fazer isso é:

git push origin foo:foo 

O que acabei fazendo, e funcionou completamente como esperado, empurrando para cima 61 objects. Antes de fazer isso, por um capricho, tentei:

 git push origin 

Pensando que talvez fosse padrão fazer uma nova ramificação remota com base no nome da minha filial local. A saída foi normal, com apenas 13 objects pressionados. Os resultados foram imperceptíveis. Nada de novo apareceu para os outros devs ou no meu repository local depois de uma busca.

Então, o que o git acha que estou dizendo quando faço o git push origin , e qual efeito, se algum, teve no meu repository remoto?

Depende da sua versão do git. Na versão antiga, tentaria empurrar cada branche local que também está presente no lado distante. Desde a versão 1.6.3, o comportamento é controlado pela opção de configuração push.default .

Os valores são:

  • matching : [ o padrão ] push all branch com o mesmo nome local e distante
  • nothing : empurre nada
  • tracking : só vai empurrar o ramo atual se ele estiver rastreando um ramo distante
  • current : vai empurrar ramo atual

Junho de 2012: [ANUNCIAR] Git 1.7.11.rc1

Um novo modo para push , simple , que é um cruzamento entre ” current ” e ” upstream , foi introduzido.
git push ” sem qualquer refspec irá empurrar a ramificação atual para o mesmo nome no repository remoto somente quando estiver configurada para rastrear a ramificação com o mesmo nome lá .
O plano é tornar este modo o novo valor padrão quando o push.default não estiver configurado.


Março de 2012: Cuidado: essa política de “correspondência” padrão pode mudar em breve
(algum dia depois de Git1.7.10 +) :

Veja ” Por favor, discuta: o que” git push “deve fazer quando você não diz o que empurrar? ”

Na configuração atual (por exemplo, push.default=matching ), o git push sem argumento pressionará todas as ramificações existentes local e remotamente com o mesmo nome .
Isso geralmente é apropriado quando um desenvolvedor envia para seu próprio repository público, mas pode ser confuso se não for perigoso ao usar um repository compartilhado.

A proposta é alterar o padrão para ‘ upstream , isto é, empurrar apenas o branch atual e empurrá-lo para o branch git pull.
Outro candidato é ‘ current ‘; isso envia apenas o ramo atual para o ramo remoto do mesmo nome.

O que foi discutido até agora pode ser visto neste tópico:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Discussões relevantes anteriores incluem:

Para participar da discussão, envie suas mensagens para: git@vger.kernel.org