Ao contribuir com um projeto, você precisa de um local seguro para escrever e refinar o código antes que ele afete sua base de código principal. Branches, forks, commits e pull requests funcionam em conjunto para oferecer esse espaço, para que você possa experimentar, salvar o trabalho em commits incrementais e propor alterações finalizadas para revisão.
Isolando o seu trabalho com branches e forks
A maioria dos trabalhos começa criando uma cópia isolada do código que você pode alterar livremente.
- Use um branch quando tiver permissão de gravação em um repositório. Um branch permite que você desenvolva um recurso, corrija um bug ou experimente em uma área contida do repositório sem afetar outros branches. Você cria um branch a partir de um branch existente, geralmente o branch padrão.
- Use um fork quando você não tiver acesso de escrita ou quando quiser independência total do projeto original. Um fork é um repositório separado que compartilha o código e as configurações de visibilidade com o repositório "upstream" original. Ele tem seus próprios branches, problemas e solicitações de pull. Com um fork, você também pode abrir pull requests para o repositório upstream.
Uma ramificação geralmente é a escolha mais simples quando você já colabora em um repositório compartilhado. Um fork geralmente é a melhor opção para contribuições a projetos de código aberto, quando você pode não ter permissão de escrita no repositório upstream.
Fazer check-in do trabalho com confirmações
Ao escrever código, você salva grupos pequenos e significativos de alterações como confirmações. Cada confirmação registra um instantâneo do seu trabalho junto com uma mensagem que descreve o que foi alterado, o que facilita o acompanhamento do histórico, revisão de alterações e compreensão de como o código evoluiu.
Fazer commits frequentes na sua branch ou fork permite:
- Divida uma mudança maior em etapas que possam ser revisadas.
- Volte para um estado anterior se um experimento não funcionar.
- Dê aos revisores um histórico claro de como você chegou à alteração final.
Propondo alterações com solicitações de pull
Quando seu trabalho estiver pronto para compartilhar, você abrirá uma solicitação de pull para propor a mesclagem de suas alterações no branch base. Uma solicitação de pull reúne suas confirmações, uma descrição da alteração e os revisores de ferramentas precisam discutir e avaliá-la antes de mesclar.
Você pode abrir um pull request enquanto o trabalho ainda estiver em andamento, criando um rascunho de pull request, que permite compartilhar suas alterações sem solicitar formalmente uma revisão. Isso é útil quando você deseja comentários antecipados ou deseja executar verificações automatizadas em seu código.
Mantendo seu código atual e otimizado
Enquanto uma solicitação de pull está aberta, o branch base pode continuar mudando à medida que outras pessoas mesclam seu trabalho. Para manter suas alterações limpas e reduzir conflitos, você pode:
- Mescle ou faça rebase da branch de base na sua branch com frequência para que seu diff permaneça focado no que sua alteração introduz. GitHub mostra um diff de três pontos por padrão, que compara sua ramificação com o ponto em que ela se desviou da ramificação base.
- Faça rebase para organizar um histórico de commits confuso—reordenando, combinando ou reformulando commits—antes de pedir revisão.
- Resolva conflitos de mesclagem quando o Git não puder combinar automaticamente as alterações concorrentes.
Trabalhando em controles de repositório
Colaboradores experientes trabalham dentro dos guardrails definidos por um repositório. Esses controles definem onde você pode fazer push, quem deve aprovar seu trabalho e quais requisitos precisam ser atendidos antes da mesclagem.
- Branches e conjuntos de regras protegidos podem bloquear pushes diretos para branches importantes, exigir histórico linear ou confirmações assinadas e exigir verificações de status ou revisões antes de mesclar.
- Os proprietários de código são solicitados automaticamente para revisão quando a alteração toca os arquivos que possuem, portanto, planeje sua aprovação em áreas confidenciais.
- Os conjuntos de regras de push podem ser aplicados em uma rede de bifurcação, restringindo caminhos de arquivo, tamanhos ou nomes em cada bifurcação.
- Os ganchos de pré-recebimento permitem que os administradores GitHub Enterprise Server imponham verificações de política no servidor antes que as confirmações sejam aceitas.
Uma cadeia de ferramentas integrada
Solicitações pull conectam seu código à automação e aos serviços que ajudam você a escrever código de forma rápida e segura.
- Code scanning e Dependabot revelam problemas de segurança e dependências vulneráveis à medida que suas alterações avançam em um pull request, para que você possa aplicar práticas de codificação segura desde cedo.
- GitHub Actions pode executar integração contínua a cada push enviado para sua pull request, compilando e testando suas alterações automaticamente.