Git Pie: A Arte Ancestral do Versionamento 🥧 Help

Referências Git: Navegando pelo Histórico

+------------------------+ | Git References | | | | HEAD -> main | | main -> a1b2c3 | | feature -> d4e5f6 | | v1.0 -> 789abc | | | | .git/refs/ | +------------------------+

Tipos de Referências

1. HEAD

+-------------+ | HEAD | +-------------+ | • Symbolic | | • Detached | | • Current | +-------------+

Exemplo de .git/HEAD:

ref: refs/heads/main

2. Branches (refs/heads/)

+------------------+ | BRANCH | +------------------+ | • Local | | • Remote-track | | • Lightweight | +------------------+

Estrutura típica:

.git/refs/heads/ ├── main ├── develop └── feature/ └── new-feature

3. Tags (refs/tags/)

+------------------+ | TAG | +------------------+ | • Lightweight | | • Annotated | | • Signed | +------------------+

Sistema de Referências

Anatomia de uma Referência

Aponta para

Parent

Symbolic Ref

Direct Ref

Referência

Commit

Commit Anterior

HEAD

Branch

Namespace Hierárquico

.git/ ├── refs/ │ ├── heads/ │ ├── tags/ │ ├── remotes/ │ └── stash └── HEAD

Manipulando Referências

Comandos Essenciais

# Listar referências git show-ref # Ver para onde HEAD aponta git symbolic-ref HEAD # Criar branch git update-ref refs/heads/nova-branch HEAD # Criar tag git update-ref refs/tags/v1.0 HEAD

Referências Especiais

1. FETCH_HEAD

+------------------+ | FETCH_HEAD | +------------------+ | Último fetch | | de cada branch | +------------------+

2. ORIG_HEAD

+------------------+ | ORIG_HEAD | +------------------+ | Backup antes de | | operações | | perigosas | +------------------+

3. MERGE_HEAD

+------------------+ | MERGE_HEAD | +------------------+ | Branch sendo | | mergada | +------------------+

Referências Relativas

^

^

~3

HEAD

Parent

Grandparent

3 commits atrás

Exemplos Práticos

HEAD^ # Parent do HEAD HEAD~2 # Dois commits atrás main^2 # Segundo parent (em merges) HEAD@{1} # Posição anterior no reflog

Reflog: Histórico de Referências

Estrutura do Reflog

+------------------+ | REFLOG | +------------------+ | HEAD@{0} | | HEAD@{1} | | HEAD@{2} | +------------------+

Comandos de Reflog

# Ver histórico git reflog # Ver reflog específico git reflog show main # Expirar entradas antigas git reflog expire --expire=30.days.ago

Boas Práticas

Organização

RefsBranchesTagsRemotesFeatureReleaseHotfixVersõesReleasesOriginUpstream

Manutenção

  1. Limpe branches obsoletas

  2. Use tags para releases

  3. Mantenha reflog limpo

  4. Documente convenções

Troubleshooting

Problemas Comuns

+----------------------+ | Problemas | | | | • HEAD desanexado | | • Ref corrompida | | • Conflito de nomes | | • Refs perdidas | +----------------------+

Soluções

# Reparar referências git fsck --full # Recriar referência git update-ref -d refs/heads/broken git branch broken HEAD # Recuperar commit perdido git fsck --lost-found

Próximos Passos

Tópicos Relacionados

22 abril 2025