Skip to main content
Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais atualizadas, acesse a documentação em inglês.

Sobre merges de pull request

Você pode mesclar solicitações de pull mantendo todos os commits em um branch de recurso, combinando todos os commits em um único commit ou realocando commits individuais do branch head no branch base.

Mesclar seus commits

Quando você clica na opção padrão Mesclar solicitação de pull em uma solicitação de pull no your GitHub Enterprise Server instance, todos os commits do branch de recursos são adicionados ao branch base em um commit de mesclagem. A solicitação de pull é mesclada por meio da opção --no-ff.

Para mesclar as solicitações de pull, você precisa ter permissões de gravação no repositório.

standard-merge-commit-diagram

Combinação por squash e mesclagem de commits

Quando você seleciona a opção Mesclar por squash e mesclar em uma solicitação de pull no your GitHub Enterprise Server instance, os commits da solicitação de pull são mesclados por squash em um só commit. Em vez de ver todos os commits individuais de um contribuidor de um branch de tópico, os commits são combinados em um commit e mesclados no branch-padrão. As solicitações de pull com commits mesclados por squash são mescladas com a opção de avanço rápido.

Para mesclar por squash e mesclar solicitações de pull, você precisa ter permissões de gravação no repositório, e o repositório precisa permitir a mesclagem squash.

commit-squashing-diagram

Você pode usar combinação por squash e merge para criar um histórico de Git mais simplificado no seu repositório. Os commits de trabalho em andamento são úteis ao trabalhar em um branch de recurso, mas não são necessariamente importantes para manter no histórico do Git. Se você fizer a combinação por squash desses commits em um commit enquanto faz merge com o branch-padrão, você certamente poderá manter as alterações originais com um histórico Git.

Mesclar mensagem para uma mesclagem por squash

Quando você faz combinação por squash e mesclagem, o GitHub gera uma mensagem de commit padrão, que você pode editar. A mensagem padrão depende do número de commits na solicitação de pull, não incluindo os commits de mesclagem.

Número de commitsResumoDescrição
Um commitO título da mensagem de commit do único commit, seguido do número de pull requestO texto da mensagem de commit para o único commit
Mais de um commitTítulo da pull request, seguido do número da pull requestUma lista das mensagens de commit para todos os commits combinados por squash, por ordem de data
Número de commitsResumoDescrição
Um commitO título da mensagem de commit do único commit, seguido do número de pull requestO texto da mensagem de commit para o único commit
Mais de um commitTítulo da pull request, seguido do número da pull requestUma lista das mensagens de commit para todos os commits combinados por squash, por ordem de data

Fazendo combinação por squash e merge com um branch de longa duração

Se você pretende continuar o trabalho no branch principal de uma solicitação de pull depois que a solicitação de pull for mesclada, recomendamos que você não use a mesclagem squash nem mescle a solicitação de pull.

Quando você cria uma solicitação de pull, o GitHub identifica o commit mais recente que está no branch principal e no branch base: o commit ancestral comum. Quando você combinar por squash e mesclar a pull request, o GitHub cria um commit no branch base que contém todas as alterações feitas no branch head desde o commit de ancestral comum.

Uma vez que esse commit está apenas no branch base e não no branch head, o ancestral comum dos dois branches permanece inalterado. Se você continuar a trabalhar no branch head e, em seguida, criar uma nova pull request entre os dois branches, a pull request incluirá todos os commits desde o ancestral comum, incluindo commits que você combinou por squash e fez merge na pull request anterior. Se não houver conflitos, você pode mesclar esses commits com segurança. No entanto, este fluxo de trabalho torna os conflitos de mesclagem mais prováveis. Se você continuar a combinar por squash e mesclar pull requests para um branch head de longo prazo, você terá que resolver os mesmos conflitos repetidamente.

Troca de base e mesclagem de commits

Quando você seleciona a opção Troca de base e mesclagem em uma solicitação de pull no your GitHub Enterprise Server instance, todos os commits do branch do tópico (ou do branch principal) são adicionados ao branch base individualmente, sem um commit de mesclagem. Dessa forma, o comportamento de troca de base e mesclagem se assemelha a uma mesclagem de avanço rápida mantendo um histórico de projeto linear. No entanto, a troca de base faz isso reescrevendo o histórico de commit no branch base com novos commits.

O comportamento de troca de base e mesclagem no GitHub Enterprise Server se desvia ligeiramente de git rebase. A troca de base e a mesclagem no GitHub sempre atualizará as informações do autor de commit e criará novos SHAs de commit, enquanto o git rebase fora do GitHub não altera as informações do autor de commit quando a troca de base acontece com base em um commit ancestral. Para obter mais informações sobre git rebase, confira git-rebase na documentação do Git.

Para troca de base e mesclagem das solicitações de pull, você precisa ter permissões de gravação no repositório e o repositório precisa permitir a troca de base e a mesclagem.

Para ver uma representação visual de git rebase, confira o capítulo "Ramificação do Git – Troca de base " do livro Pro Git.

Não é possível realizar troca de base e mesclagem no your GitHub Enterprise Server instance quando:

  • A pull request tem conflitos de merge.
  • O rebase dos commits do branch base no branch head se depara com conflitos.
  • O rebase dos commits é considerado "não seguro"; por exemplo, quando é possível fazer rebase sem conflitos de merge, mas que geraria um resultado diferente daquele que um merge geraria.

Se você ainda quiser trocar a base dos commits, mas não for possível realizar troca de base e mesclagem automaticamente no your GitHub Enterprise Server instance, faça o seguinte:

Qualquer pessoa com permissões de gravação no repositório pode mesclar as alterações usando o botão “Trocar base e mesclar” no your GitHub Enterprise Server instance.

Mesclagens indiretas

Uma solicitação de pull pode ser mesclada automaticamente quando o branch principal dela é mesclado direta ou indiretamente com o branch base de maneira externa. Em outras palavras, se o commit da dica do branch principal se tornar acessível por meio da dica do branch de destino. Por exemplo:

  • O branch main está no commit C.
  • O branch feature foi ramificado de main e está atualmente no commit D. Ele tem uma solicitação de pull direcionada a main.
  • O branch feature_2 foi derivado de feature e está atualmente no commit E. Ele também tem uma solicitação de pull direcionada a main.

Se a solicitação de pull E --> main for mesclada primeiro, a solicitação de pull D --> main será marcada como mesclada automaticamente porque todos os commits de feature agora poderão ser acessados por meio de main. Mesclar feature_2 em main e enviar main por push para o servidor por meio da linha de comando marcará ambas as solicitações de pull como mescladas.

As solicitações de pull nessa situação serão marcadas como merged mesmo se as regras de proteção de branch não tiverem sido atendidas.

Leitura adicional