Respostas:
A partir de 15/08/2016, o GitHub permite alterar o branch de destino de uma solicitação pull por meio da GUI. Clique Edit
ao lado do título e selecione o ramo no menu suspenso.
Agora você pode alterar o branch base de uma solicitação de pull aberta. Depois de criar uma solicitação pull, você pode modificar o branch de base para que as alterações na solicitação pull sejam comparadas a um branch diferente. Alterando o branch base de sua solicitação de pull original em vez de abrir um novo com o branch base correto, você poderá manter um trabalho e discussão valiosos.
O remetente pode alterar isso ao emitir a solicitação pull, mas depois de emitir, você não pode alterá-la.
Por outro lado, você pode mesclar manualmente seu branch e push, o que eu faço quase regularmente para solicitações pull mal direcionadas.
Você pode encontrar o hub
gema útil para trabalhar com os componentes da solicitação pull.
Essa gema encerra o processo manual, que é:
git checkout ${target_branch} && git merge ${remote}/${branch}
git push origin ...
git merge --no-ff ...
como @GuillermoMansilla menciona em sua resposta.
Uma alternativa ao uso da gema do hub mencionada por outras respostas é usar a linha de comando para mesclar solicitações de pull local , o que permite que você faça:
$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*
Os comandos acima funcionam diretamente se você adicionar primeiro a seguinte linha ao seu .git/config
arquivo:
fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*
O que isso faz é permitir que você baixe TODAS as solicitações de pull. Como isso pode não ser desejado para repositórios enormes, o GitHub modificou as instruções para apresentar a git fetch origin pull/ID/head:BRANCHNAME
sintaxe, o que evita a modificação do arquivo de configuração e baixa apenas aquele único pull request.
Embora você não possa alterar a solicitação pull existente, pois ela não é sua, você pode facilmente criar uma nova se o repositório de origem relacionado ainda existir - sim, mesmo se for de outra pessoa.
Vá para o repositório do remetente e crie uma nova solicitação pull em seu repositório usando os mesmos commits, mas certifique-se de definir o branch de destino correto corretamente.
Em seguida, volte para seu próprio repositório e aceite a nova solicitação de pull. Voila!
Não há nada de errado com a solução de Daniel Pittman, no entanto, eu trataria essas mesclagens como "sem avanço rápido", ou seja, alterando a etapa número 3 para:
git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}
Com o uso --no-ff
, o histórico ficará mais fácil de ler. Isso vai dizer claramente que os $n
commits vieram $branch
, e também tornará sua vida mais fácil se você precisar reverter algo feito naquele branch.
Para responder também à pergunta do eoinoc e dar uma dica adicional:
Depois de fazer a mesclagem, seu git cli solicitará que você escreva uma mensagem, geralmente uma mensagem genérica aparecerá dizendo algo como
Mesclar branch de rastreamento remoto 'usuário / seu-branch' em seu-branch
Certifique-se de editar essa mensagem e incluir uma referência ao número da solicitação pull. Isto é: (assumindo que o número da solicitação pull seja 123)
Mesclar branch de rastreamento remoto 'usuário / seu-branch' em seu-branch
refs # 123 resolvendo qualquer coisa ...
Então, da próxima vez que você visitar sua página de questões / solicitações de pull do github e verificar aquela solicitação de pull em particular, verá sua mensagem com um link para confirmar onde você fez a fusão.
Aqui está uma imagem do que quero dizer.
Para fazer isso, vá para a página inicial do seu repositório, clique nos ramos e mude o ramo padrão de master para outra coisa, no meu caso "dev".
Depois disso, sempre que alguém criar uma solicitação pull, o merge
botão mesclará automaticamente a solicitação em "dev" em vez de master.