Todas as outras respostas falam sobre "upstream" (o ramo do qual você puxa).
Porém, uma ramificação local pode enviar para uma ramificação diferente daquela que ele puxa.
master
pode não enviar para a ramificação de rastreamento remoto " origin/master
".
O ramo upstream de master
pode ser origin/master
, mas pode ser enviado para o ramo de rastreamento remoto origin/xxx
ou até mesmo anotherUpstreamRepo/yyy
.
Esses são definidos branch.*.pushremote
para a ramificação atual junto com o global remote.pushDefault
valor.
É que ramo de rastreamento remoto, que conta quando procuram commits unpushed: aquele que controla o branch at the remote
onde o ramo local seria empurrado para.
O branch at the remote
pode ser, novamente, origin/xxx
ou mesmo anotherUpstreamRepo/yyy
.
O Git 2.5+ (Q2 2015) apresenta um novo atalho para isso: <branch>@{push}
Veja cometer 29bc885 , cometer 3dbe9db , cometer adfe5d0 , cometer 48c5847 , cometer a1ad0eb , cometer e291c75 , cometer 979cb24 , cometer 1ca41a1 , cometer 3a429d0 , cometer a9f9f8c , cometer 8770e6f , cometer da66b27 , cometer f052154 , cometer 9e3751d , cometer ee2499f [tudo de 21 de maio 2015] e confirme e41bf35 [01 de maio de 2015] por Jeff King ( peff
) .
(Mesclado por Junio C Hamano - gitster
-no commit c4a8354 , 05 jun 2015)
A confirmação adfe5d0 explica:
sha1_name
: implementar @{push}
taquigrafia
Em um fluxo de trabalho triangular, cada ramificação pode ter dois pontos de interesse distintos: o de @{upstream}
onde você normalmente sai e o destino para o qual normalmente envia. Não existe uma abreviação para o último, mas é útil ter.
Por exemplo, você pode querer saber quais confirmações você ainda não enviou :
git log @{push}..
Ou, como exemplo mais complicado, imagine que você normalmente extrai alterações origin/master
(que você definiu como sua @{upstream}
) e envia as alterações para seu próprio fork pessoal (por exemplo, as myfork/topic
).
Você pode enviar para o garfo a partir de várias máquinas, exigindo que você integre as alterações a partir do destino do envio, e não a montante .
Com esse patch, você pode fazer:
git rebase @{push}
em vez de digitar o nome completo.
O commit 29bc885 acrescenta:
for-each-ref
: aceite o %(push)
formato " "
Assim como temos " %(upstream)
" para reportar o " @{upstream}
" para cada referência, este patch adiciona " %(push)
" para corresponder " @{push}
".
Ele suporta os mesmos modificadores de formato de rastreamento que o upstream (porque você pode querer saber, por exemplo, quais filiais têm o compromisso de enviar por push ).
Se você deseja ver quantas confirmações suas ramificações locais estão à frente / atrás em comparação com a ramificação para a qual você está empurrando:
git for-each-ref --format="%(refname:short) %(push:track)" refs/heads
git log @{push}..
. Ver que novo atalho@{push}
(referenciando o ramo de rastreamento remoto que você está empurrando a) em minha resposta abaixo