Article image
Millena Costa
Millena Costa09/03/2024 23:14
Compartilhe

Git Branch: Ramificações e Versionamento

  • #Git

Imagine o quão trabalhoso seria armazenar uma cópia extra de todos os arquivos de um projeto a cada mudança significativa que você fizesse nele, por receio de perder funcionalidades presentes nas versões anteriores. Agora, acresça a ideia com a possibilidade de estar desenvolvendo esse mesmo projeto em conjunto com alguns colegas, processo esse que demandaría a todos que mantivessem essa mesma prática de armazenamento de versões para certificarem-se de que nada seria perdido ao longo do processo.

Cada um de seus colegas, assim como você, guardaria as próprias versões do projeto num ambiente de desenvolvimento local, de forma que, vocês como equipe, não teriam acesso ao trabalho uns dos outros.

No meio do caminho várias situações indesejadas poderiam surgir, como uma decisão penosa entre qual das versões do projeto -- dentre as suas e as de seus colegas -- deve ser considerada para dar seguimento a linha de desenvolvimento principal, ou, de fato, ser possível escolher uma versão concreta, mas ainda haver restrição em manter apenas o conteúdo dessa, perdendo quaisquer arquivos contidos nas versões ignoradas por ser muito trabalhoso verificar mudança por mudança em cada um deles.

Vocês poderiam, também, sofrer com uma falha de comunicação que fizesse com que trabalhassem, simultaneamente, modificando uma mesma parte do projeto, sem saberem individualmente que há outros colegas de equipe fazendo o mesmo. Esse acontecimento resultaria em tempo de trabalho perdido e, possivelmente, soluções muito distintas que não seguiriam em funcionamento caso aplicadas nas outras versões desenvolvidas.

Após tomarmos ciência desse cenário desastroso, chegou a hora de falarmos sobre uma alternativa certeira para solucionar cada um dos problemas apresentados: As branches do git.

Entendendo o conceito de "branch"

Branch, em tradução livre do inglês, significa "ramificação". De maneira análoga aos diversos ramos de uma árvore que abrigam diferentes versões de uma mesma fruta, com variações em tamanho, cores e texturas, em cada "ramo" do nosso git estarão contidas distintas versões de um mesmo projeto. Essas variações são criadas por diferentes colaboradores com acesso ao repositório, envolvendo arquivos adicionados, removidos, ignorados ou modificados.

Ao realizarmos um commit, marcação do estado dos arquivos em um ponto específico na linha do tempo do desenvolvimento de projetos, estamos consolidando alterações realizadas no repositório que o contém. As ditas ramificações (branches) se tratam, simplesmente, de ponteiros móveis para commits específicos, de forma que o fluxo de desenvolvimento não se perca em meio à evolução do projeto com base em seu versionamento.

image

Comandos para manipulação de branches

Agora que compreendemos o que realmente são as ramificações e vimos alguns dos casos nos quais elas poderiam ser úteis, vamos aprender comandos para tornar mais clara a relevância de sua aplicação em nossas rotinas, utilizando-nos novamente do primeiro exemplo citado do seu projeto hipotético desenvolvido em conjunto com colegas.

Criando novas branches

Depois de apresentar o conceito de branch aos seus colegas de equipe, você decide começar a jornada de ramificação do projeto criado por vocês. Por padrão, ao ser criado um repositório git, a primeira branch validada que apontará para os commits sem especificação de ramificações, será a branch chamada master. É nessa branch que você decide manter tudo o que já está consolidado no projeto.

Já para seguir com o desenvolvimento desse, alterando o seu escopo sem que a sua versão principal seja afetada, você decide criar uma nova branch. Para o caso de uma branch local, é utilizado o comando:

git branch <nome_nova_branch>

Já para a criação de uma branch remota, executa-se:

git push origin <nome_nova_branch>

Listando branches

Após a criação de sua primeira branch, você recebe um recado de um de seus colegas mencionando que também criou uma branch e pedindo para que você verifique se ele o fez de maneira correta, assim, você opta pela listagem de todas as branches do repositório em questão, incluindo a branch principal.

Para obter uma lista com os nomes das branches locais, executa-se:

git branch

Já para a listagem das branches remotas:

git branch -r

Por fim, para a listagem, tanto de branches locais quanto remotas:

git branch -a

Renomeando branches

Ao analisar a listagem de nomes, percebeu que seu colega conseguiu criar a ramificação, mas inconscientemente, acabou atribuindo um nome diferente do combinado à sua nova branch, assim, você decide ajudá-lo e renomear devidamente essa ramificação.

Caso a branch esteja em seu repositório local, é possível renomeá-la sobrescrevendo uma possível ramificação já existente com o mesmo nome que deseja atribuir à ela, apenas o seguinte comando é executado:

git branch -m <nome_novo>

Já para não sobrescrever a possível ramificação local, mas sim substituí-la pela nova branch, executa-se somente o comando:

git branch -M <nome_novo>

Entretanto, caso a branch a ser removida esteja em repositório remoto, além de executar o mesmo passo anterior que seria utilizado para uma branch local, é preciso fazer a remoção da branch remota cujo nome foi alterado. Para isso, utiliza-se:

git push origin --delete <nome_antigo>
git push origin :<nome_antigo> <nome_novo>

E, em seguida, redefine-se a branch remota associada com o seguinte comando:

git push origin -u <nome_novo>

Ainda há uma maneira prática de renomear, tanto as branches locais quanto remotas simultâneamente, sendo essa a utilização dos comandos:

git branch [-m/-M] <nome_antigo> <nome_novo>
git push origin :<nome_antigo> <nome_novo>

Migrando entre branches

Antes de tentar alterar o nome da branch de seu colega, você lembra que, para renomear uma ramificação, essa precisa ser a sua branch atual, portanto, você precisa "migrar" da sua ramificação para a de seu colega para renomeá-la (conforme o comando especificado anteriormente). Para a mudança de ramificação, é executado o seguinte comando:

git checkout <nome_branch_destino>

Removendo branches

Com o avanço do projeto, dias depois, você percebe algumas branches obsoletas, que já foram mescladas com a branch principal ou cujo versionamento contido nelas já não seria mais útil para o seguimento do trabalho de sua equipe. Assim, você decide por removê-las:

Para as branches locais que você imagina já terem sido mescladas com a branch principal, mas ainda assim deseja uma última confirmação pois o conteúdo a ser perdido, caso excluídas, pode ser importante para o projeto, executa-se o comando:

git branch -d <nome_branch>

Já para as branches locais obsoletas, aquelas cujo conteúdo poderia ser excluído sem prejudicar o projeto, mesmo com a possibilidade dessa não ter sido mesclada com a branch principal, executa-se:

git branch -D <nome_branch>

Já para a exclusão de branches remotas, executa-se o comando:

git push origin --delete <nome_branch>

Conclusão

Branches são um tema muito mais abrangente do que foi exposto no presente artigo, visto que os seus seus "sub-comandos" apresentam as mais diversas variações com uma infinidade de utilidades (essas podem ser devidamente consultadas na plataforma <https://git-scm.com/docs/git-branch> ou com a execução do comando man git branch em seu próprio terminal para entendimento mais detalhado). O uso de ramificações é de grande valia para todo e qualquer desenvolvedor, portanto, busque conciliar o aprendizado de seu funcionamento com o dos outros comandos git e não deixe de colocá-los em prática aplicando-os em seus futuros projetos!

Referências

<https://git-scm.com/book/pt-br/v2/Branches-no-Git-Branches-em-poucas-palavras>

<https://git-scm.com/docs/git-branch>

man git branch
Compartilhe
Comentários (0)