Estou tentando revisar uma solicitação de recebimento no GitHub para um ramo que não é mestre. O ramo de destino estava por trás do mestre e a solicitação de recebimento mostrava confirmações do mestre, então eu mesclei o mestre e o enviei ao GitHub, mas as confirmações e diferenças para eles ainda aparecem na solicitação de recebimento após a atualização. Eu dupliquei se o ramo no GitHub tem os commits do master. Por que eles ainda estão aparecendo na solicitação de recebimento?
Também verifiquei a solicitação pull localmente e ela mostra apenas os commits não mesclados.
Respostas:
Parece que a solicitação de recebimento não acompanha as alterações na ramificação de destino (entrei em contato com o suporte do GitHub e recebi uma resposta em 18 de novembro de 2014 informando que isso é por design).
No entanto, você pode mostrar as alterações atualizadas, fazendo o seguinte:
Substituir
githuburl
,org
,repo
,targetbranch
, ecurrentbranch
, conforme necessário.Ou como o hexsprite apontou em sua resposta, você também pode forçá-lo a atualizar clicando Editno PR e alterando temporariamente a base para um ramo diferente e vice-versa. Isso produz o aviso:
E deixará duas entradas de log no PR:
fonte
Aqui está uma boa solução alternativa. Use o
Edit
botão ao visualizar o PR no GitHub para alterar a ramificação base para algo diferente demaster
. Em seguida, mude novamente paramaster
e agora ele mostrará corretamente apenas as alterações das confirmações mais recentes.fonte
Para resumir, o GitHub não rebase o histórico de confirmação automaticamente em solicitações pull. As soluções mais simples são:
Solução 1: Rebase
Suponha que você deseja mesclar a
master
partir defeature-01
:Se você estiver trabalhando em um garfo, pode ser necessário substituí-lo
origin
acimaupstream
. Consulte Como atualizo um repositório bifurcado do GitHub?para saber mais sobre como rastrear ramificações remotas do repositório original.Solução 2: Crie uma nova solicitação de recebimento
Suponha que você queira mesclar a introdução
master
defeature-01
:Agora abra uma solicitação pull
feature-01-rebased
e feche a solicitaçãofeature-01
.fonte
Você precisa adicionar o seguinte ao seu
~/.gitconfig
arquivo:Isso alcançará automaticamente o mesmo que o mostrado nesta resposta .
Eu peguei isso daqui .
fonte
Para qualquer outra pessoa que se depare com isso e confunda com o comportamento de solicitação de solicitação do GitHub, a causa principal é que um PR é uma diferença da dica do ramo de origem em relação ao ancestral comum do ramo de origem e do ramo de destino. Portanto, ele mostrará todas as alterações no ramo de origem até o ancestral comum e não levará em consideração as alterações que possam ter ocorrido no ramo de destino.
Mais informações disponíveis aqui: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/
As diferenças comuns baseadas em ancestrais parecem perigosas. Eu gostaria que o GitHub tivesse a opção de criar um PR de 3 vias mais padrão, baseado em mesclagem.
fonte
Uma maneira de corrigir isso é
git rebase targetbranch
nesse PR. Entãogit push --force targetbranch
, o Github mostrará os commit e diff certos. Tenha cuidado com isso se você não souber o que está fazendo. Talvez faça o checkout de um ramo de teste primeiro para fazer a rebase e depoisgit diff targetbranch
para garantir que ainda seja o que você deseja.fonte
Isso acontece com o GitHub quando você confirma o squash mesclado no ramo de destino.
Eu estava usando squash e mesclagem com o Github como estratégia de mesclagem padrão, incluindo mesclagens do ramo de destino. Isso introduz um novo commit e o GitHub não reconhece que esse commit compactado é o mesmo que já existe no master (mas com hashes diferentes). O Git lida com isso corretamente, mas você vê todas as alterações novamente no GitHub, tornando a revisão irritante. A solução é fazer uma mesclagem regular desses commits a montante, em vez de uma squash e mesclagem. Quando você deseja mesclar outro ramo ao seu como uma dependência,
git merge --squash
e reverta esse único commit antes de sair do master, uma vez que o outro branch realmente tenha conseguido dominar.EDIT: outra solução é rebase e forçar push. História limpa, mas reescrita
fonte
Não tenho muita certeza da teoria por trás disso. Mas eu consegui isso várias vezes e consegui corrigir isso fazendo o seguinte.
Isso buscará e mesclará as alterações do ramo principal de repositórios original (se você apontou para isso)
Em seguida, você envia suas alterações com força para o repositório clonado do github (destino)
Isso garantirá que o clone do github e o repositório principal estejam no mesmo nível de confirmação do github e que você não veja alterações desnecessárias nas ramificações.
fonte
Experimente os comandos abaixo, um por um.
fonte
Abordagem à prova de falhas, se você estiver preocupado demais com a bagunça: vá para o arquivo e remova manualmente as alterações, depois faça uma squash com sua última confirmação usando
Eu não há conflitos, você está pronto para ir!
fonte