Conceitos bem básicos de git
desenvolvimento
tags:
- git
- conceitos
- referências
Postado em 24/11/2018
Olá! Hoje vou deixar aqui algumas anotações que fiz enquanto estava estudando git
. Não vou fazer uma explicação sobre o que é git (talvez eu faça um post sobre isso e volto aqui para deixar o link) e também não vou colocar nenhum exemplo de comando neste post. A ideia aqui é somente ter os conceitos, coisa bem básica mesmo, para primeiro entender como funciona e depois poder mostrar na prática.
As anotações que fiz para este post foi enquanto estava estudando git no site Learn Git Branching. Recomendo a todos que estejam estudando sobre esse assunto a dar uma olhada nesse link, ele explica de uma maneira muito didática os conceitos e comandos necessários para entender git.
Commit
O commit
é o conceito mais básico quando estamos aprendendo sobre git. O commit registra uma fotografia do estado do respositório (também chamada de snapshot). Fazendo uma analogia com um jogo de video-game, o commit seria como um check-point, onde você salva todo o progresso do jogo até o momento. Cada commit registra um determinado estado do repositório em um determinado momento.
Cada commit registra também qual é o seu commit "pai", ou seja, qual o estado do repositório antes desse commit atual. Isso possibilita saber todo o histórico de alterações do repositório.
O commit não gera uma cópia de todos os arquivos do repositório, pois se fosse assim, um repositório git ocuparia muito espaço em disco. O que acontece é que é salvo apenas o conjunto de mudanças entre os commits, também chamado de "delta".
Branch
De maneira bem simples, um branch
é apenas uma refrência para um commit. A vantagem disso é que a criação de um novo branch não gera sobrecarga de armazenamento no repositório.
O branch é, basicamente, uma separação lógica do trabalho feito no repositório. Todos os commits que forem feitos dentro de um branch estarão separados do outros branches (depois será necessário juntar esses branches, vou falar disso no próximo tópico). Por isso é necessário "avisar" o git qual branch que estamos trabalhando no momento.
Merge
Como podemos ter vários branches no repositório, vamos precisar juntar eles em um único branch. O merge
irá se encarregar de fazer isso. Com o merge é criado um novo commit que terá como referência dois "pais", que são os dois últimos commits dos dois branches que foram fundidos.
Esse commit será a junção de dois branches que foram mergeados. É importante lembrar que estamos fazendo o merge do branch a
no branch b
, sendo assim, o branch b
conterá todas as alterações dos dois branches, enquanto o branch a
não será alterado.
Rebase
O rebase
tem um resultado final semelhante ao merge, porém seu funcionamento é diferente. Ao invés de criar um commit que junta duas branches, ele "copia" os commits do branch a
para dentro do branch b
.
A vantagem desse procedimento é que o histórico de commits do reposotório fica mais "limpo", sem ter um commit específico só para o merge. A desvantagem é que o histórico não fica tão fiel ao que aconteceu exatamente no repositório, sem o registro de qual foi o ponto onde os branches se fundiram. Ao final do rebase vai parecer que todos os commits feitos em paralelo nos dois branches foram feitos em sequência em apenas um branch.
Finalizando...
Bom, por enquanto é isso. São apenas algumas anotações. Mais uma vez, sugiro que você também faça o tutorial deste link do Learn Git Branching para aprender esse conceitos de forma mais interativa.
Obrigado por ler este post e qualquer dúvida ou sugestão é só mandar aqui nos comentários, ou falar comigo pelas redes sociais.