eu quero git push origin
definir automaticamente a referência upstream quando envio um branch criado localmente pela primeira vez.
Eu sei git push -u
, mas não quero ter que pensar se já usei -u
ou não antes ou se de outra forma defini uma referência upstream. Em outras palavras, quero git push
ter automaticamente o efeito de git push -u
em qualquer push de um branch que ainda não tenha um upstream.
Isso é possível? Se for necessário um alias ou script de utilitário, tudo bem.
push.default
ebranch.<name>.merge
em git-config (1) ?push.default
configurei paracurrent
- é como posso dizergit push origin
sem um refspec ou upstream. Mas isso não ajuda com a configuração automática do upstream.Respostas:
Você pode configurá-lo
git config
usandogit config --global push.default current
.Documentos: https://git-scm.com/docs/git-config/#Documentation/git-config.txt-pushdefault
fonte
git push origin
sem um refspec ou upstream. Mas isso não ajuda com a configuração automática do upstream.push
, por exemplo, apenas um desenvolvedor está em seu branch, que edita apenas uma cópia de um repo.Como não acho que isso seja possível usando git config, aqui está o que você pode fazer no bash:
Se a filial atual tem uma filial de rastreamento remoto, ele chama,
git push
caso contrário, chamagit push -u
fonte
git config --global push.default current
.push.default=current
apenas cria um branch no repositório remoto com o mesmo nome do branch local, mas não define o branch local para rastrear o remoto. Não sei por que esse é o caso, mas vale a pena ter em mente.Nota: o fato de que a nova política de push padrão "
simple
" depende de um branch ter um upstream significa que: aconfiguração de um branch upstream é vista como uma etapa voluntária, não uma automatizada oculta
Portanto, a partir da resposta do Mechanicalfish , você pode definir um alias, com as aspas duplas corretas ( ) escaped ( ):
"
\"
Sc0ttyD propõe nos comentários o seguinte alias:
Em várias linhas:
fonte
-u
opção explícita existe e porque não há uma configuração para tornar essa opção automática (daí o alias).alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
Eu tive o mesmo problema. Encontrei este alias (.gitconfig)
[alias] track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
Uso:
git track
uma vez por nova filial (atualmente em check-out). Em seguida, basta empurrar normalmente :)fonte
As respostas de @VonC e @Frexuz são úteis, mas ambas as soluções geram um erro para mim. Usando ambas as respostas, eu construí algo que funciona para mim:
Isso resulta na execução de
git push -u origin $BRANCHNAME
ougit push
, dependendo se seu upstream (propriedadebranch.$BRANCHNAME.merge
) está definido.Inserir este alias na linha de comando exigirá códigos de escape, então provavelmente é mais fácil usar um editor para inserir no arquivo correto (
$HOME/.gitconfig
(global),.git/config
(local) ou/etc/gitconfig
(sistema))fonte
git config --global -e
Resposta curta
Se você realmente gosta de ser explícito e usar a
-u
opção quando necessário, mas simplesmente não deseja digitar o todo:Então você pode usar o seguinte alias:
E simplesmente digite:
Resposta longa
Normalmente, a necessidade de
-u
(abreviação de--set-upstream
) é quando acabamos de criar um novo branch local e commitar, e queremos colocá-lo no upstream. O repositório remoto ainda não tem o novo branch, então precisamos dizer ao git para criar e rastrear o branch remoto antes de enviar o commit. Isso é necessário apenas para o primeiro push no branch. Aqui está um cenário típico:Pessoalmente, gosto da necessidade de ser explícito com
git push -u
ao criar o branch remoto: é uma operação bastante significativa, compartilhar um novo branch para o mundo.No entanto, odeio que tenhamos que escrever explicitamente
git push -u origin foo
. Não só é difícil digitar, mas mais importante, é bastante sujeito a erros! É fácil cometer um erro ao digitar o nome do branch, e o novo branch remoto não terá o mesmo nome do seu branch local! Na maioria dos casos, realmente, você deseja que o repositório upstream sejaorigin
, e o branch upstream tenha o mesmo nome do seu branch local.Portanto, estou usando o seguinte alias no meu
.gitconfig
, que é um subconjunto da excelente resposta fornecida por Mark :Agora, podemos fazer o seguinte, que ainda é explícito, mas menos sujeito a erros:
fonte
Resolvi esse problema usando este script Bash simples. Não funcionará em branches existentes, mas se você criar todos os seus branches com esta função, você sempre terá seu branch upstream definido automaticamente.
O $ 1 representa o primeiro argumento que você passa depois,
con
então é como fazer:... apenas fazendo isso:
fonte
Simplesmente:
fonte
git push -u
, mas ...". Portanto, isso não responde à pergunta.Fiz uma extensão git com scripts úteis, incluindo este:
https://github.com/jvenezia/git-line
fonte
Se você quiser usar os recursos integrados do git apenas com o menor número de chaves possíveis, basta digitar:
$ git push -u o
tabH
tabe o autocompletar lhe dará
$ git push -u origin HEAD
Para habilitar o autocomplate no OSX, configure um
~/.git-completition.bash
arquivo com este conteúdo e adicione as seguintes linhas ao seu~/.bash_profile
arquivo e reinicie o seu terminal:Afeta terminais integrados também, como aquele em vscode etc.
fonte
git-completition.bash
e acrescentei à minha resposta.