Git - envia atalho de ramificação atual

365

Existe um atalho para dizer ao Git para enviar a ramificação de rastreamento atual à origem?
Nota: Sei que posso alterar o comportamento de envio padrão , mas estou procurando uma solução ad-hoc que não mude o comportamento padrão.

Por exemplo, suponha que eu esteja no ramo feature/123-sandbox-testsque estaria usando

git push origin feature/123-sandbox-tests

o que é tedioso. Estou procurando um atalho, algo como

git push origin current

onde o git sabe que a corrente é feature/123-sandbox-tests.


Edit : A partir da versão 2.0, o comportamento padrão do git mudou para um comportamento mais intuitivo, que é o que eu queria alcançar. Veja esta questão para mais detalhes.

Editar 2 : a resposta do ceztko é a melhor resposta, pois permite empurrar o ramo atual, independentemente das configurações.

Elad
fonte

Respostas:

703

De acordo com a git pushdocumentação:

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

Então eu acho que o que você precisa é git push origin HEAD. Também pode ser útil git push -u origin HEADconfigurar informações de rastreamento upstream na filial local, se você ainda não tiver enviado à origem.

ceztko
fonte
11
Prefiro isso ao invés de definir push.default para simples ou atual, porque máquinas diferentes podem ter configurações diferentes. Você pode se acostumar a git pushempurrar apenas a ramificação atual, mas em outras máquinas, pode empurrar acidentalmente todas as ramificações correspondentes.
wisbucky 8/09/14
11
@wisbucky Eu tenho vários aliases, inclusive co, então se eu tentar puxar para baixo e depois verificar o código sem meu ~/.gitconfigarquivo nessa VM, eu o saberei imediatamente. Isso me deixa bem seguro ao alterar o padrão de envio para upstream.
Damon
9
Interessante que isso não funcione apenas @, que está documentado como um alias válido para HEAD. (eg git push -u origin @)
void.pointer
197

Você pode configurar o git para enviar para a ramificação atual usando o seguinte comando

git config --global push.default current

então apenas faça

git push 

isso enviará o código para sua ramificação atual.

Mahesh
fonte
Faz sentido adicionar push = refs/heads/current:refs/for/master/currenta uma seção 'remota' em .git / config? Ou seja, 'atual' é uma palavra especial aqui? Ou estará procurando um ramo chamado "atual"?
David Doria
6
@DavidDoria 'current' não é um ramo chamado aqui.
Mahesh
Melhor fazer git push -u origin feature_branch_namepara configurar upstream / rastreamento! Se você usar um repositório remoto, pelo menos.
Flo
40

Você deve examinar uma pergunta semelhante em Comportamento padrão de "git push" sem uma ramificação especificada

Basicamente, explica como definir o comportamento padrão para enviar sua ramificação atual apenas em execução git push. Provavelmente o que você precisa é:

git config --global push.default current

Outras opções:

  • nada : não empurre nada
  • correspondência : Empurre todos os ramos correspondentes
  • upstream / rastreamento : envie a ramificação atual para o que estiver rastreando
  • current : envia o ramo atual
Najor
fonte
11

Eu uso esse alias na minha configuração .bashrc

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

No comando, $gpbele pega o nome do ramo atual e o envia à origem.

Aqui estão meus outros pseudônimos:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'
theodor
fonte
8

Para o que vale, o atalho definitivo:

No meu .bash_profileeu tenho alias push="git push origin HEAD", portanto, sempre que digito push, sei que estou pressionando para o ramo atual em que estou.

Ryan Rebo
fonte
6

Se você estiver usando o git 1.7.x, poderá executar o seguinte comando para definir a ramificação de rastreamento remoto.

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

Então você pode simplesmente usar git pushpara enviar todas as alterações. Para uma resposta mais completa, consulte a resposta aceita para uma pergunta semelhante aqui.

Se você deseja enviar apenas a ramificação atual com o comando push, é possível alterar o comportamento de envio para upstream:

git config --global push.default upstream
Faruk Sahin
fonte
Obrigado, no entanto, neste caso, TODOS os ramos de rastreamento não seriam enviados para a origem?
Elad
Eu modifiquei a resposta, consulte o link, a resposta é mais completa lá.
Faruk Sahin
Novamente, o problema é que todas as ramificações de rastreamento estão sendo enviadas dessa maneira. Como escrevi na minha pergunta, o ramo é um ramo rastreado em primeiro lugar, então acho que definir o ramo upstream como você sugeriu é redundante. Ou eu estou errado?
Elad
Em seguida, você pode configurar o git para enviar apenas a ramificação atual, alterando o comportamento de envio do git. git config --global push.default upstreamdefinirá o comportamento de envio para enviar somente o ramo atual.
precisa
5

A maneira mais simples: corra git push -u origin feature/123-sandbox-testsuma vez. Isso empurra o ramo da maneira que você está acostumado a fazer e também define as informações de rastreamento upstream na sua configuração local. Depois disso, você pode simplesmente git pushenviar as ramificações rastreadas aos seus remotos a montante.

Você também pode fazer isso na configuração, definindo branch.<branch name>.mergeo nome da filial remota (no seu caso, o mesmo que o nome local) e, opcionalmente, branch.<branch name>.remoteo nome do controle remoto para o qual você deseja enviar (o padrão é a origem). Se você procurar na sua configuração, provavelmente já existe uma dessas opções master, para que você possa seguir esse exemplo.

Por fim, certifique-se de considerar a push.defaultconfiguração. O padrão é "correspondência", que pode ter resultados indesejados e inesperados. A maioria das pessoas que conheço acha "upstream" mais intuitiva, o que empurra apenas o ramo atual.

Detalhes sobre cada uma dessas configurações podem ser encontrados na página de manual do git-config .

Pensando bem, ao reler sua pergunta, acho que você sabe tudo isso. Eu acho que o que você está realmente procurando não existe. Que tal uma função bash algo como (não testado):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}
Ryan Stewart
fonte
1

Com a ajuda da resposta de ceztko, escrevi esta pequena função auxiliar para facilitar minha vida:

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

Empurra a ramificação atual para a origem e também define a ramificação de rastreamento remoto, caso ainda não tenha sido configurada.

Bantak
fonte