Falando em ramificações... uma característica importante do Git é o uso de branches. Pense na caule de uma árvore como o seu projeto principal. Criamos branches para separar o nosso trabalho em cada tarefa. Isso nos ajuda a isolar e trabalhar em uma parte do projeto sem impactar diretamente o projeto principal até que estejamos prontos para mesclá-lo de volta.
Vamos explorar os conceitos e aprender a trabalhar com branches no Git. Você pode aplicar esse conhecimento, seja usando o terminal ou uma ferramenta como o GitHub Desktop ou a integração do Git do VS Code.
Por que usar branches?
Por padrão, quando inicializamos um repositório Git, o Git cria uma branch, geralmente chamada de "main", embora você possa vê-la com outros nomes. Vamos nos referir à branch principal como "main" ao longo deste artigo.
Criamos uma branch separada para cada problema ou funcionalidade que trabalhamos. Então, enquanto uma funcionalidade está em andamento, comitamos nosso código para a branch dessa funcionalidade.
Por exemplo, esperamos passar uma semana trabalhando em uma funcionalidade "Adicionar Feedback" que permite aos usuários comentarem em uma receita. Enquanto trabalhamos, cometemos nossas edições à branch "Adicionar Feedback".
Outra pessoa da equipe está trabalhando na atualização do aviso de direitos autorais em todas as páginas do nosso site. Eles cometem suas edições na branch "Adicionar direitos autorais".
De repente, recebemos uma notificação de nossos usuários de que o login não está funcionando. Criamos uma nova branch para consertar esse problema sem impactar qualquer trabalho parcialmente completo.
Quando o código da branch "problema de login" estiver completo, mesclamos a branch de volta à branch principal. E, opcionalmente, podemos excluir a branch mesclada.
Usamos branches para manter uma versão funcional do nosso código na branch principal, e código parcialmente completo em branches de funcionalidades ou problemas. Dessa forma, a branch principal sempre terá uma versão funcional do código.
Mas o Git não impõe isso - é responsabilidade sua e da sua equipe definir se e como vocês usarão branches.
Como criar e alternar branches no Git
Nossa equipe está construindo um site para coletar e gerenciar receitas. Criamos um repositório para o projeto com o Git. Por padrão, ele cria a branch principal do projeto, geralmente chamada de "main".
Começamos um projeto para atualizar o estilo do site. Queremos garantir que nosso trabalho nesse tarefa esteja isolado do nosso código existente, então criamos uma branch a partir da branch principal.
Antes de começarmos a trabalhar na branch, mudamos para essa branch. Em seguida, fazemos alterações para nossa tarefa. Modificamos um arquivo, depois o registramos e o comitamos na branch.
A qualquer momento em que você quiser trabalhar em uma branch, altere para essa branch. Alternar para uma branch verifica essa branch. E o código na nossa pasta de trabalho é automaticamente alterado para o código do último commit naquela branch. Todos os commits ocorrem então naquela branch verificada.
Nesse ponto, um de nossos usuários reporta um problema de login. Temos a mudança de estilo parcialmente completa, então não queremos corrigir isso naquela branch.
Em vez disso, criamos outra branch a partir da branch principal. Como a criamos a partir da branch principal, o código inicial para essa nova branch é uma cópia do código da branch principal. Não tem nenhuma das nossas mudanças de estilo.
Quando mudamos para essa branch, a nossa pasta de trabalho reflete o código daquela branch. Basicamente, redefinimos nossa pasta de trabalho para o código da nova branch.
Então, corrigimos o problema de login nesta nova branch, modificando um arquivo, adicionamos ao stage e comitamos a mudança.
Este processo está claro até agora? Porque usamos branches, podemos trabalhar em outros problemas conforme eles aparecem sem afetar as tarefas que estão em andamento.
Como Mesclar Branches no Git
Quando a correção de login estiver completa, mesclamos a branch "problema de login" de volta à branch principal. A correção então se torna parte do nosso código principal, conforme mostrado na Figura 6. Uma vez que a branch é mesclada, podemos excluí-la.
Quando terminamos as mudanças de estilo, podemos mesclar o branch "mudança de estilo" de volta para o branch principal. Dessa forma, nossas mudanças de estilo se tornam parte do código principal.
Mas antes de mesclarmos os branches, é importante revisar e resolver quaisquer conflitos que possam surgir. Conflitos podem ocorrer quando o mesmo trecho de código foi modificado em ambos os branches. A resolução de conflitos envolve escolher qual versão de código desejamos manter.
Depois de resolver os conflitos, podemos mesclar o branch "mudança de estilo" de volta ao branch principal com o comando "git merge". Opcionalmente, podemos deletar o branch "mudança de estilo" após a mesclagem.
Lembre-se, mesclar branches é uma parte importante do fluxo de trabalho do Git, pois nos permite trazer de volta as modificações realizadas em diferentes branches para o branch principal.
Mas espere... nosso ramo principal de código agora tem a correção do login, mas nosso ramo "mudança de estilo" não tem.
Em algum momento, antes de o ramo "mudança de estilo" ser mesclado ao principal, precisamos trazer a alteração de login do principal.
Nós mesclamos as últimas alterações do nosso ramo principal ao ramo "mudança de estilo", resolvendo quaisquer conflitos de mesclagem.
E quando a mudança de estilo estiver concluída, nós mesclamos o ramo "mudança de estilo" de volta ao ramo principal.
Agora, o nosso ramo principal tem todas as nossas alterações, e podemos excluir o nosso ramo "mudança de estilo".
Observe que a maioria dos projetos tem seus próprios processos específicos, requisitos e preferências para usar branches, definir commits e mesclar mudanças. Verifique a documentação do projeto ou com seus colaboradores antes de criar branches.
Resumo
Nós usamos uma branch para isolar o trabalho em uma tarefa, como uma funcionalidade, mudança ou problema. Isso mantém nossa branch principal livre de código parcialmente completo ou não testado.
Podemos ter qualquer número de branches de funcionalidades definidas a qualquer momento. Certifique-se de mudar para a branch apropriada antes de fazer o stage e o commit. E mescle qualquer mudança da branch principal se necessário.
Quando a tarefa estiver completa, mescle a branch da tarefa na branch principal. As branches são destinadas a serem de curta duração e são frequentemente excluídas após a mesclagem.