git push para branch específico

101

Mesmo depois de ler esta pergunta: git-push-current-branch , ainda estou tendo dificuldade em descobrir como devo escrever meu comando git push. Conforme mencionado no link da pergunta, não está claro na documentação.

Eu gostaria de usar meu exemplo do 'mundo real'. A seguir está o que vejo quando executo um git statuscomando no nível superior do meu branch:

No branch amd_qlp_tester

Seu branch está à frente de 'origin / amd_qlp_tester' por 5 commits.

etc ...

Então, meu nome de branch é, amd_qlp_testermas foi "ramificado" do branch principal (se eu entendi os termos errados, é por causa da minha formação SVN). Mas então há também o nome `origin / amd_qlp_testser '

Então, como formular meu comando push?

É algum dos seguintes:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push
code_fodder
fonte

Respostas:

92

git push origin amd_qlp_testervai funcionar para você. Se você apenas digitar git push, o remoto da ramificação atual é o valor padrão.

A sintaxe do push é semelhante a - git push <remote> <branch>. Se você olhar para o seu .git/configarquivo remoto , verá uma entrada [remote "origin"]que especifica o url do repositório. Portanto, na primeira parte do comando, você dirá ao Git onde encontrar o repositório para este projeto e, em seguida, apenas especificará um branch.

Petr Mensik
fonte
Obrigado por isso :), você pode explicar por que são duas "palavras" separadas quando a descrição do status dit exibe como um caminho, ou seja, por que é origin amd_qlp_testsere nãoorigin/amd_qlp_tester
code_fodder
O padrão "remoto" é baseado na configuração do branch atual (neste caso realmente será origin). O (s) branch (s) para enviar os padrões (nas versões atuais do git) para :se não estiverem definidos, o que significa matching, mas isso deve mudar no futuro.
rasgou
Estou um pouco confuso, estou usando a v2.10, quando digito git pushela tenta empurrar todos os branches rastreados, ao contrário do que você disse ("o remoto do branch atual é o valor padrão").
Roberto
Git 2.x deve usar simpleestratégia de push, o que significa que irá enviar apenas o branch atual. blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik
fatal: Couldn't find remote ref branch-name-here
doug65536
111

Se sua filial local e sua filial remota tiverem o mesmo nome, você pode simplesmente fazer:

git push origin branchName

Quando o nome do seu branch local e remoto for diferente, você pode simplesmente fazer:

git push origin localBranchName:remoteBranchName
Imranmadbar
fonte
8

As respostas em questão às quais você vinculou são sobre como configurar o git para que você possa inserir git pushcomandos muito curtos e fazer com que eles façam o que quiser. O que é ótimo, se você sabe o que quer e como soletrar no Git-Ese, mas é novo no git! :-)

No seu caso, a resposta de Petr Mensik é (bem, "a") certa. Aqui está o porquê:

O comando remonta ao seu arquivo para localizar o nome "remoto" (por exemplo, ). O arquivo de configuração lista:git push remote.git/configorigin

  • onde (em termos de URL) aquele remoto "vive" (por exemplo, )ssh://hostname/path
  • para onde vão os empurrões, se diferente
  • o que é empurrado, se você não disse que branch (s) empurrar
  • o que é buscado quando você corre git fetch remote

Quando você clonou o repo pela primeira vez - seja quando for - git configurou os valores padrão para alguns deles. O URL é o que você clonou e o resto, se definido ou não, são todos os padrões "razoáveis" ... ou, hmm, são eles?

O problema com eles é que as pessoas mudaram de ideia, com o tempo, sobre o que é "razoável". Portanto, agora (dependendo da sua versão do git e se você configurou as coisas em detalhes), o git pode imprimir muitos avisos sobre mudanças nos padrões no futuro. Adicionando o nome do "branch a ser empurrado" - amd_qlp_tester- (1) o fecha, e (2) empurra apenas aquele branch.

Se você quiser fazer push de maneira mais conveniente, pode fazer isso com:

git push origin

ou mesmo:

git push

mas se isso faz o que você deseja, depende se você concorda com os "primeiros autores do git" que os padrões originais são razoáveis ​​ou com os "autores posteriores do git" que os padrões originais não são razoáveis. Então, quando você quiser fazer todas as coisas de configuração (eventualmente), veja a pergunta (e respostas) que você vinculou.

Quanto ao nome origin/amd_qlp_testerem primeiro lugar: na verdade, é uma entidade local (um nome mantido dentro de seu repo), embora seja chamado de "branch remoto". É o melhor palpite do git em "onde amd_qlp_testerfica lá". Git o atualiza quando pode .

Torek
fonte
1
Obrigado pela explicação, acho que entendi agora. Gosto de ser preciso, então vou continuar git push origin amd_qlp_testeraté precisar fazer coisas mais avançadas :)
code_fodder
2

Gostaria de adicionar uma resposta atualizada - agora que uso o git há algum tempo, acho que frequentemente uso os seguintes comandos para fazer push (usando a pergunta original como exemplo):

  • git push origin amd_qlp_tester- empurre para o ramo localizado no remoto chamado originno ramo remoto chamado amd_qlp_tester.
  • git push -u origin amd_qlp_tester- igual ao último, mas configura o upstream vinculando o branch local ao branch remoto para que da próxima vez você possa usar apenas git push/pullse ainda não estiver vinculado (só precisa fazer isso uma vez).
  • git push - Depois de definir o upstream, você pode usar esta versão mais curta.

A -u opção de nota é a versão resumida de --set-upstream- eles são os mesmos.

code_fodder
fonte