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
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
Navegação no Histórico
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
Manutenção
Limpe branches obsoletas
Use tags para releases
Mantenha reflog limpo
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