Eu uso o seguinte comando para empurrar para o meu ramo remoto:
git push origin sandbox
Se eu disser
git push origin
Isso empurra mudanças em meus outros ramos também, ou apenas atualiza meu branch atual? Eu tenho três filiais: master
, production
e sandbox
.
A documentação do git push
não é muito clara sobre isso, então eu gostaria de esclarecer isso para sempre.
Quais ramificações e controles remotos os seguintes comandos do git push
atualizam exatamente?
git push git push origin
origin
acima é um controle remoto.
Eu entendo que git push [remote] [branch]
irá empurrar apenas aquele branch para o controle remoto.
Você pode controlar o comportamento padrão, definindo push.default em sua configuração git. Da documentação do git-config (1) :
push.default
Define a ação que o git push deve executar se nenhum refspec for fornecido na linha de comandos, nenhum refspec estiver configurado no remoto e nenhum refspec estiver implícito em nenhuma das opções fornecidas na linha de comandos. Os valores possíveis são:
nothing
: não empurre nada
matching
: empurre todos os ramos correspondentes
Todas as filiais com o mesmo nome em ambas as extremidades são consideradas correspondentes.
Este é o padrão no Git 1.x.
upstream
: empurra a ramificação atual para sua ramificação upstream (o tracking
é um sinônimo obsoleto para upstream)
current
: empurra o ramo atual para um ramo de mesmo nome
simple
: (novo no Git 1.7.11) como upstream, mas se recusa a empurrar se o nome da branch upstream for diferente do local
Esta é a opção mais segura e é adequada para iniciantes.
Isso se tornará o padrão no Git 2.0.
Os modos simples, atual e upstream são para aqueles que querem empurrar uma única ramificação depois de terminar o trabalho, mesmo quando as outras ramificações ainda não estão prontas para serem empurradas
Exemplos de linha de comando:
Para ver a configuração atual:
git config --global push.default
Para definir uma nova configuração:
git config --global push.default current
git push origin
irá empurrar todas as mudanças nas ramificações locais que possuem ramificações remotas correspondentes na origin
Como para git push
Funciona como
git push
, ondeé o remoto da ramificação atual (ou origem, se nenhum remoto estiver configurado para a ramificação atual).
Na seção Exemplos da página man do git-push
Você pode configurar o comportamento padrão para o seu git com push.default
git config push.default current
ou se você tem muitos repositorys e quer o mesmo para todos então
git config --global push.default current
A corrente nessa configuração significa que, por padrão, você só enviará a ramificação atual quando fizer o git push
Outras opções são:
ATUALIZAÇÃO – NOVA FORMA DE FAZER ISTO
A partir do Git 1.7.11, faça o seguinte:
git config --global push.default simple
Esta é uma nova configuração introduzida que funciona da mesma forma que a atual, e será tornada padrão para git de v 2.0 de acordo com os rumores
Acabei de enviar meu código para um branch e o enviei para o github, assim:
git branch SimonLowMemoryExperiments git checkout SimonLowMemoryExperiments git add . git commit -a -m "Lots of experimentation with identifying the memory problems" git push origin SimonLowMemoryExperiments
Aqui está uma informação muito útil e útil sobre o Git Push : Git Push: apenas a dica
O uso mais comum do git push é empurrar suas mudanças locais para o seu repository upstream público. Assumindo que o upstream é um remoto chamado “origem” (o nome remoto padrão se o seu repository é um clone) e o ramo a ser atualizado para / de é chamado “mestre” (o nome da ramificação padrão), isso é feito com: git push origin master
git push origin
enviará alterações de todas as ramificações locais para as ramificações correspondentes do controle remoto de origem.
git push origin master
enviará mudanças do ramo mestre local para o ramo mestre remoto.
git push origin master:staging
enviará alterações da ramificação principal local para a ramificação temporária remota, se existir.
(Março de 2012)
Cuidado: essa política de ” matching
” padrão pode mudar em breve
(às vezes 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
), ogit 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
Acabei de colocar isso na minha seção de aliases do .gitconfig e adoro como funciona:
pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"
Vai empurrar o ramo atual para a origem com git pub
ou outro repository com git pub repo-name
. Saboroso.
Um git push tentará empurrar todas as ramificações locais para o servidor remoto, e isso é o que você não deseja. Eu tenho algumas conveniências para lidar com isso:
Alias ”gpull” e “gpush” apropriadamente:
No meu ~ / .bash_profile
get_git_branch() { echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'` } alias gpull='git pull origin `get_git_branch`' alias gpush='git push origin `get_git_branch`'
Assim, a execução de “gpush” ou “gpull” irá empurrar apenas minha ramificação “atualmente em”.
Você pode empurrar a ramificação atual com o comando
git push origin HEAD
(tirou daqui )
Você pode alterar esse comportamento padrão no seu .gitconfig
, por exemplo:
[push] default = current
Para verificar as configurações atuais, execute:
git config --global --get push.default
Em vez de usar aliases, prefiro criar scripts git-XXX para que eu possa controlá-los com mais facilidade (todos os nossos desenvolvedores possuem um diretório controlado por origem em seu caminho para esse tipo de coisa).
Este script (chamado git-setpush
) irá definir o valor de configuração para o valor remote.origin.push
para algo que apenas irá empurrar a ramificação atual:
#!/bin/bash -eu CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2) NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH echo "setting remote.origin.push to $NEW_PUSH_REF" git config remote.origin.push $NEW_PUSH_REF
observe que, como estamos usando o Gerrit
, ele define o destino como refs/for/XXX
para inserir em uma ramificação de revisão. Também assume origem é seu nome remoto.
Invoque-o depois de verificar um ramo com
git checkout your-branch git setpush
Poderia obviamente ser adaptado para também fazer o checkout, mas eu gosto de scripts para fazer uma coisa e fazê-lo bem
Eu adicionei as seguintes funções no meu arquivo .bashrc para automatizar essas tarefas. Ele faz push / git pull + nome do ramo atual.
function gpush() { if [[ "x$1" == "xh" ]]; then cat <