Estou usando o GitHub há algum tempo e normalmente costumava fazer push dos meus branches de recursos e iniciar um Pull Request que eu mesclei. Descobri que isso me ajudou a acompanhar onde mesclei branches.
Mas recentemente tenho lido mais e mais sobre como o Git funciona e percebi que posso usar os merge-commits para me referir a quando mesclei branches.
Então, o que devo fazer ao mesclar um branch de recurso no master:
Executar um merge-commit no master e, em seguida, colocá-lo no upstream OU Enviar o branch local e iniciar uma solicitação pull?
Eu li Apresentando solicitações pull para uma equipe de 2 pessoas – mesclar minhas próprias solicitações? e Qual é o fluxo de trabalho com 2 pessoas em um projeto e Devo abrir solicitações pull de um branch no repo oficial ou meu fork? mas nenhum deles parece responder o que estou procurando.
Comentários
- O que exatamente você acha que está faltando nessas respostas?
- O primeiro fala sobre isso do ponto de vista de que as solicitações pull devem ser revisadas por pares. O segundo oferece um fluxo de trabalho. O terceiro não é ' nem mesmo relacionado.
- Estou olhando para isso em Melhores práticas ou Como manter um bom histórico do git do ponto de vista.
- Quando mesclo um PR, faço isso mesclando o branch localmente. Isso me permite ter certeza de que a mesclagem se aplica perfeitamente e executar novamente os testes antes de publicar o resultado. GitHub ' s Solicitações Pull são apenas uma formalização desse fluxo de trabalho, o Git em si não tem um conceito de PRs.
- Quando um PR é mesclado, ele produz uma fusão commitar no master, então eu não ' acho que isso faz alguma diferença no histórico do git. Portanto, eu não ' não acho que haja qualquer razão para usar um ou outro além de sua preferência pessoal entre a linha de comando e a IU do Github.
Resposta
mecanismo git-merge:
Usar git merge feature
enquanto no mestre mescla o branch feature
para master
e produz um merge-commit
(se o branch não pode ser acelerado) no histórico do git. Para forçar uma merge-commit
sendo feita, use a opção --no-ff
com merge
.
Mecanismo de solicitação de pull de mesclagem:
Quando iniciamos uma solicitação de pull no GitHub, ele cria um GitHub Issue
onde as pessoas podem falar e discutir os commits no PR antes de fundi-lo. Quando um PR é mesclado no GitHub, ele faz exatamente a mesma coisa que git merge feature
.
O que devo fazer ?
Então, no que diz respeito à história, não há diferença entre os dois.
E no que diz respeito à contribuição, seus contribuidores não terão fazer algo diferente para as duas situações. Eles são iguais (sem o bate-papo simpático).
Práticas recomendadas:
E não consegui encontrar as melhores práticas, mas a lógica diz que os PRs não são muito úteis se houver apenas um único contribuidor para um repositório.
@lxrec e @amon me ajudaram a chegar a essa conclusão.
Comentários
- Dica:
git merge
pode não registrar um commit de mesclagem se puder fazer um “avanço rápido”. Para forçar um commit de mesclagem, você pode adicionar a opção--no-ff
. - Eu prefiro fazer git-merge em local em vez de fazer em githuib.com, se eu teria de qualquer coisa no github.com. Eu preferiria não fazer diretamente no branch master, prefiro usar o branch não master, que pode primeiro ser definido no modo de teste antes de torná-lo disponível para produção.
Resposta
Como Ashhar disse, em termos técnicos e históricos, não há diferença. Para projetos com um equipe pequena, prefiro mesclar diretamente em vez da etapa extra de criar um PR. No entanto, quando um recurso precisa de revisão / feedback ou quando é um WIP e mais de uma pessoa estará trabalhando nele, tendo a abrir um PR e adicionar um lista de tarefas para a descrição do PR.
Observe que git merge
pode usar o avanço rápido se não houver alterações no mestre, então você pode querer usar git merge --no-ff
. Costumo não usar.
Então, em resumo, use apenas RP s quando você precisa de discussão. Caso contrário, basta mesclar diretamente.
Comentários
- Vale ' também mencionar que a discussão e o feedback sobre uma solicitação pull podem vêm de fontes automatizadas, bem como de membros da equipe. Se você tiver um servidor CI configurado, ele pode fornecer resultados de compilação e teste para que você nunca mescle algo que interrompa a compilação no mestre.