Ramificações no Git
Você é um desenvolvedor web tentando aprender mais sobre o Git para o seu trabalho. Você criou um site HTML e CSS simples que apresenta fotos de gatos para praticar suas habilidades no Git e tem trabalhado nisso com seus amigos, Alice e Bob.
À medida que seu projeto progride, você percebe que gostaria que todos pudessem trabalhar em mais de uma tarefa ao mesmo tempo sem atrapalhar o trabalho de outra pessoa. Você precisa de uma maneira de manter o trabalho de todos separados, para que o novo desenvolvimento não atrapalhe as correções de bugs existentes. No Git, as filiais facilitam esse tipo de colaboração.
O trabalho feito em uma filial não precisa ser compartilhado, e não interfere com o trabalho feito em outras filiais. As ramificações permitem que você mantenha as confirmações relacionadas a cada tópico juntas e isoladas de outros trabalhos, para que as alterações feitas em um tópico sejam fáceis de revisar e acompanhar.
A programação de software moderna é realizada quase inteiramente em ramificações. O objetivo é manter o ramo principal limpo até que o trabalho esteja pronto para o check-in. Em seguida, você envia suas alterações para a ramificação principal ou, melhor ainda, envia uma solicitação pull para mesclar as alterações.
Uma das vantagens do Git em relação aos sistemas de controlo de versão (VCSs) anteriores é que, com o Git, é possível criar uma ramificação de forma extremamente rápida; equivale a gravar um hash de 40 carateres num ficheiro em .git/heads
. A troca de ramificações também é rápida, porque o Git armazena arquivos inteiros e os descompacta em vez de tentar reconstruí-los a partir de listas de alterações. A fusão no Git não é tão simples, mas é simples e muitas vezes completamente automática.
Vamos aprender o que são as ramificações, como são utilizadas e como funcionam.
Estrutura e nomenclatura de filiais
Um ramo é simplesmente uma cadeia de commits que se ramificam da linha principal de desenvolvimento, como um galho em uma árvore.
Se você estiver mudando para o Git de outro VCS, talvez esteja acostumado com uma terminologia ligeiramente diferente. O VCS Subversion nomeia sua ramificação trunk
padrão, enquanto o Git a nomeia.master
Você pode renomear a ramificação padrão, assim como pode renomear qualquer outra ramificação. Neste módulo, nomeamos a ramificação main
padrão .
Uma ramificação geralmente começa com uma confirmação na ramificação padrão; neste caso, em main
. A ramificação cresce uma cadeia de histórico separada à medida que as confirmações são adicionadas. Eventualmente, as mudanças na ramificação são fundidas novamente no main
. Neste módulo, você aprenderá a fazer confirmações em uma ramificação e mesclá-las na main
ramificação.
Suponha que você se ramifica fora da main
ramificação. Eis como visualizar o que acontece:
Cada letra maiúscula no diagrama representa uma consolidação. As filiais têm nomes como add-authentication
e fix-css-bug
, e as filiais podem ter filiais próprias. O objetivo final é permitir que os desenvolvedores façam o que precisam fazer sem pisar uns nos outros, e acabar com um ramo principal que represente os melhores esforços de todos os envolvidos.
Criar e alternar ramificações (git branch e git checkout)
Um motivo comum para criar uma nova ramificação é fazer alterações a uma funcionalidade existente. Uma ramificação para este fim seria normalmente designada de ramificação de tópico ou ramificação de funcionalidade.
Você pode criar uma nova ramificação usando o git branch
comando. Alterne entre ramificações usando o git checkout
comando.
Você já encontrou checkout
como uma maneira de substituir arquivos na árvore de trabalho, obtendo-os do índice. Sem caminhos na lista de argumentos, checkout
atualiza tudo na árvore de trabalho e no índice para corresponder à confirmação especificada — neste caso, o chefe da ramificação.
Mesclar ramificações (git merge)
Quando você tiver finalizado algum trabalho em uma ramificação, talvez um recurso ou uma correção de bug, você desejará mesclar essa ramificação de volta à ramificação principal. Você pode usar o git merge
comando para mesclar uma ramificação específica em sua ramificação atual.
Por exemplo, se você estivesse trabalhando em uma ramificação chamada my-feature
, o fluxo de trabalho seria semelhante a este exemplo:
# Switch back to the main branch
git checkout main
# Merge my-feature branch into main
git merge my-feature
Depois de usar esses comandos e resolver quaisquer conflitos de mesclagem (descreveremos os conflitos de mesclagem mais adiante neste módulo), todas as alterações da sua my-feature
ramificação estarão em main
.