git branches

git branches

Photo by Yancy Min on Unsplash

No artigo anterior, vimos que commits no git são snapshots completos do projeto e não uma série de diferenças.

Continuando a série trago o conceito de branches.

branches

Uma branch no git é simplesmente um ponteiro para um commit no histórico.

git-log-with-branch.png

Quando um novo commit é criado, a branch que está em uso é reapontada para esse novo commit. Ela acompanha o projeto conforme ele evolui.

As branches possibilitam criar linhas paralelas de evolução.

Isso permite, por exemplo, manter uma linha principal mais estável enquanto novas features são desenvolvidas em linhas paralelas e posteriormente reintegradas na linha principal.

git-new-branches.png

git-diverging-branches.png

Vale ressaltar que quanto mais versões paralelas e quanto mais tempo elas demorarem para ser reintegradas na linha principal, mais difícil será essa reintegração no futuro e chance de ter conflitos será bem maior.

Excluir uma branch remove somente ela, que é o ponteiro para um commit, os commits permanecem intactos no repositório. Branches que não estiverem mais sendo utilizadas podem ser apagadas para facilitar o uso das que ainda estão ativas.

tags

Uma tag é similar a uma branch, no sentido de que também é apenas um ponteiro para um commit, no entanto as tags não se movem para outros commits depois de criadas.

Elas servem para marcar um commit que tenha algum significado especial, por exemplo, uma versão do projeto que foi publicada.

git-log-with-branch-tag.png

learn git branching

Existe uma ferramenta muito bacana pra experimentar e visualizar esses conceitos que é Learn Git Branching.

É uma aplicação web que simula um repositório git e conforme você executa comandos do git ela mostra uma animação da evolução do histórico (commits, branches e tags).

learn-git-branching.gif

Nela tem também diversos exercícios onde ele explica conceitos e comandos do git e você tem que tentar reproduzir o histórico mostrado com os comandos ensinados.

conclusão

  • branches são ponteiros para commits e acompanham os novos commits criados e permitem linhas paralelas de evolução do projeto
  • tags também são ponteiros para commits, mas não se movem depois que são criadas

referências