Como o Git Funciona - Estrutura Interna do Controle de Versao

15 min leitura | 2025.12.08

Conceitos Basicos do Git

Git e um sistema de controle de versao distribuido. Cada desenvolvedor possui uma copia completa do repositorio e pode trabalhar offline.

Caracteristicas do Git: Gerencia arquivos atraves de snapshots, registrando o estado completo em vez de apenas diferencas.

Tipos de Objetos Git

Git gerencia dados usando 4 tipos de objetos:

1. Blob (Binary Large Object)

Objeto que armazena o conteudo de um arquivo. Nao inclui o nome do arquivo, apenas os dados puros.

# Verificar objeto blob
git cat-file -p <blob-hash>

2. Tree

Objeto que representa a estrutura de diretorios. Contem referencias a blobs ou outras trees, junto com nomes de arquivos.

3. Commit

Objeto que registra um snapshot:

  • Referencia para a tree de nivel superior
  • Referencia para o commit pai
  • Informacoes do autor e committer
  • Mensagem de commit

4. Tag

Objeto que atribui um nome a um commit especifico. Usado para gerenciar versoes de release.

Hash SHA-1

Todos os objetos sao identificados por um hash SHA-1. Como o mesmo conteudo sempre resulta no mesmo hash, dados duplicados podem ser eliminados eficientemente.

# Verificar hash de um objeto
git hash-object README.md

# Verificar hash do commit
git log --oneline

Como Branches Funcionam

Um branch e simplesmente um “ponteiro para um commit”. Criar um novo branch apenas adiciona um ponteiro, sem copiar dados.

# A essencia do branch (.git/refs/heads/main)
cat .git/refs/heads/main
# → Exibe o hash do commit

O que e HEAD: E um ponteiro que indica o branch atualmente em checkout. Esta registrado no arquivo .git/HEAD.

Tipos de Merge

Merge Fast-forward

Quando nao ha divergencia, completa-se simplesmente avancando o ponteiro.

Merge 3-way

Quando ha divergencia, compara o ancestral comum e ambos os branches para criar um novo commit de merge.

Resumo

Git implementa controle de versao eficiente e confiavel usando 4 tipos de objetos (blob, tree, commit, tag) e hashes SHA-1. Entender que branches sao apenas ponteiros torna as operacoes do Git mais intuitivas.

← Voltar para a lista