Conceito de Branch — Git e Github
Tags: git, github, programming, braziliandevs
Published: 2022-01-09 03:07:01

Depois de conhecermos os *[3 Estados dos arquivos](https://dev.to/eduardoopv/3-estados-dos-arquivos-git-e-github-3ee6)* rastreados pelo Git, conseguimos entender e criar o nosso *[Primeiro repositório](https://dev.to/eduardoopv/primeiro-repositorio-git-e-github-jeo)* no Github, já enviando os arquivos do projeto para o repositório remoto, agora precisamos entender um conceito um pouco mais avançado do Git, as *[Branchs](https://git-scm.com/book/en/v2/Git-Branching-Branch-Management)*.

---

## O que são as Branchs?

As *branchs(ramificações)* é como se fosse uma **linha independente de desenvolvimento**, todo projeto precisa conter pelo menos uma que é criada automaticamente após o primeiro commit, chamada de *main/master*. Podemos criar novas ramificações principalmente quando precisamos **adicionar uma nova funcionalidade, ou corrigir algum bug**, sem interferir no desenvolvimento e andamento do projeto.



Podemos abstrair um pouco tudo isso imaginando a branch como uma *"linha do tempo"*, possuímos a main/master onde o progresso de desenvolvimento ocorre naturalmente, ao criarmos uma nova branch criamos uma nova *"linha do tempo"* com o mesmo código da main, a diferença é que podemos realizar alterações tranquilamente, já que estamos em uma *"linha do tempo"* paralela.

![Imagem descrevendo as Branchs](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zu5t8kxe4h1mcmvbrvm0.png)

Essa imagem ilustra bem o conceito, onde a *Branch 1* e a *Branch 2* podem ser uma nova feature ou uma correção/alteração e a *master* segue intacta, agora partiremos para o terminal *Bash*.

---

## Branch na prática

Para começarmos, que tal nós visualizarmos as novas branchs existentes? no git bash podemos utilizar o comando:

`$ git branch`

Caso nenhuma branch tenha sido criada, só irá mostrar a *main/master* que vem por padrão, para criarmos uma nova é realmente simples:

`$ git branch NomeDaBranch`
*(Lembrando que precisamos ter pelo menos um commit no projeto, para o git identificar qual é a branch principal)*.

Algo normal de acontecer na correria do dia a dia é criar branch com nome errado, para isso o Git tem um comando super simples para renomear uma branch.

`$ git branch -m NovoNomeDaBranch`

Aparentemente nada mudou, isso é por que você precisa "mover" para a branch criada, você ainda está na *main/master*, para irmos basta utilizar o comando *checkout*:

`$ git checkout NomeDaBranch`

Agora podemos realizar as nossas modificações no código sem interferir na versão principal.

Caso queira excluir a branch, uma vez que ela não será mais usada, lembrando que para isso precisamos estar "fora" da ramificação que vamos deletar.

`$ git branch -d NomeDaBranch`
ou
`$ git branch -D NomeDaBranch`

Ok, mas qual a diferença de `-d` para `-D`?
Ao usar o `-d` minúsculo, seria uma forma "segura", já que o Git irá impedir de excluir a ramificação se existirem mudanças não mescladas(Irei explicar um pouco a frente o que significa mesclagem).
E o `-D` maiúsculo seria ao contrario, ele força uma exclusão mesmo se houver mudanças não mescladas. 


![Demonstração dos comandos na prática](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/88k7736et8tdla247uap.png)

---

## Merge

Chegou o momento mais esperado, você finalizou a task, corrigiu o bendito bug no header, e está usando uma branch separada `fix/header`, agora como podemos juntar essa *"linha do tempo"* com a ramificação principal? Bem simples, podemos utilizar o *[Merge](https://git-scm.com/docs/git-merge)*.


![Antes de depois do merge](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3r4etsulibq9er474czj.jpg)

Primeiro precisamos ir para a branch que queremos receber as alterações e em seguida mesclar as alterações com o merge:

`$ git merge fix/header`


![Usando o comando merge](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yygxjaslelgspwkxhh84.png)

---

Agora você conhece um dos principais conceitos do Git, muito utilizado quando existe mais de um desenvolvedor em um projeto, dessa maneira fica tudo bem divido evitando mexerem na mesma linha de código e criarem um conflito ou até pior...

Fontes:
https://www.hostinger.com.br/tutoriais/git-branch
https://git-scm.com/