Minha solicitação pull foi mesclada, o que fazer a seguir?

112

Recentemente, participei de um projeto do GitHub. Eu fiz o seguinte:

Bifurcou o repositório original, clonou-o na minha máquina local, fiz um branch para corrigir o bug existente, consertou o bug que estava naquele branch, empurrei esse branch para o meu repo, enviei uma solicitação de pull para o autor do repositório para mesclar meu branch de correção para seu ramo mestre.

Foi a primeira vez que me comprometi com o código de outra pessoa, então não sei o que fazer. Agora minha solicitação pull foi mesclada ao repositório / projeto original do autor.

O que eu devo fazer a seguir? Devo excluir o ramo? Devo mesclar o branch? Algo mais?


Informação adicional:

O projeto original possui uma única ramificação.

Eu também tenho um upstream definido para obter as atualizações mais recentes do repositório original. (Eu fiz assim) :

git remote add upstream https://path/to/original/repo.git

E eu recebo atualizações como esta:

git fetch upstream
Santosh Kumar
fonte
12
Ghehe, você não é o único lutando: Youtube Video :)
Anne,

Respostas:

65

O que fazer a seguir é: continuar contribuindo com novos recursos ou consertando outros bugs em seus próprios branches dedicados (enviados apenas para seu fork).

O que significa que o garfo fica, mas os galhos dentro do garfo podem ir e vir.

Você também pode remover a bifurcação se não estiver planejando contribuir mais, mas isso removerá a entrada correspondente em 'Repositórios para os quais você contribui' .

É mais fácil:

  • exclua seu fixbranch (na verdade, agora ele foi excluído para você ) em seu fork (e em seu repositório clonado local: consulte " Excluir um branch Git local e remotamente ")
  • git pull upstream master(se masterfoi o branch no qual sua correção foi integrada: a fusão será rápida): nenhum rebase necessário neste ponto.
  • recrie um branch de correção em cima de seu local atualizado master(agora com o mais recente de upstream master).

No entanto, nunca se esqueça de uma etapa antes de enviar qualquer solicitação pull futura :

rebase primeiro seu branch atual ( fix) do branch de destino upstream

( upstreamsendo o repo original que você bifurcou: veja " Qual é a diferença entre origem e upstream no github ")

Antes de enviar qualquer coisa de volta para o repo original ("upstream"), você precisa se certificar de que seu trabalho é baseado no último do dito repo original (ou a solicitação de pull não resultará em uma mesclagem de avanço rápido uma vez aplicada de volta ao upstreamrepo).
Veja, por exemplo, " Fluxo de trabalho para gerenciar solicitações pull em repositórios compartilhados no github ".

Em outras palavras, upstreampode evoluir (ter novos commits enviados) enquanto você está ocupado consertando coisas. Você precisa repetir suas correções sobre o trabalho mais recente do upstream para ter certeza de que seus commits ainda são compatíveis com o mais recente de upstream.


O OP Santosh Kumar pergunta nos comentários :

Eu puxei e mesclei de upstreammestre, e agora?

Se você não fez nenhuma nova correção desde sua solicitação pull recente, veja acima (exclua e recrie um novo branch fixem cima do atualizado master).

Se você tiver feito mais algum trabalho desde sua solicitação de pull, eu não faria a mesclagem de upstreamse quiser fazer uma nova solicitação de pull: eu puxaria e rebasearia :

git pull --rebase upstream master

Dessa forma, todo o meu novo trabalho local é reproduzido em cima dos upstream mastercommits mais recentes (obtidos em meu repositório local), supondo que masterseja o branch de destino que integrará minha solicitação de pull futura.

Em seguida, posso enviar meu trabalho local para ' origin', que é minha bifurcação no GitHub do upstream.
E da minha bifurcação no GitHub, posso fazer uma solicitação de pull com segurança, sabendo que só adicionará novos commits upstreamsem a necessidade de qualquer resolução de mesclagem: mesclar esses novos commits no upstreamrepo significará uma mesclagem simples e rápida.


A git pull --rebasesem especificar o branch no topo do qual você deseja realocar seu fixbranch (atualmente em check-out) não funcionaria:

Isso ( git pull --rebase) diz:

You asked to pull from the remote '`upstream`', but did not specify a branch. 

Devo anexar master finalmente? E o que isso vai fazer ?, vai deletar meu fixbranch?

Sim, você pode especificar o branch que será o alvo da solicitação de pull, por exemplo ' master'.
Isso não excluirá seu fixbranch, mas irá reproduzi-lo em cima do upstream masterobtido em seu repo.

VonC
fonte
Você pode explicar o rebase da parte upstream ?
Santosh Kumar
@SantoshKumar, você precisa realocar seus commits locais sobre o repo original (aqui referido como upstream) antes de enviar para seu fork e fazer sua solicitação de pull: veja stackoverflow.com/questions/9257533/…
VonC
Sim, eu sei que estou fazendo uma pergunta básica . Eu puxei e mesclei do upstream para o master, e agora?
Santosh Kumar,
@SantoshKumar é uma boa pergunta. Eu editei a resposta para resolver isso. Procure por "O OP Santosh Kumar pergunta nos comentários: ..."
VonC 09/10/12
Isso diz: You asked to pull from the remote 'upstream', but did not specify a branch.Devo acrescentar masterfinalmente? E o que isso fará ?, excluirá meu branch de correção ?
Santosh Kumar
18

Em primeiro lugar, parabéns pela sua primeira contribuição para um projeto no Github.

O fluxo de trabalho normal do Github é criar um novo branch para cada problema que você resolver. Dessa forma, o mantenedor do repositório principal pode decidir qual de suas soluções fundir e qual rejeitar. Depois que um branch foi mesclado com o upstream, ele não será mais necessário e normalmente pode ser excluído.

Philipp
fonte