Testar Entradas Expiradas do Reflog
Neste passo, aprenderemos sobre como o Git gerencia o reflog e como as entradas podem eventualmente expirar. Por padrão, o Git mantém as entradas do reflog por um certo período. Entradas acessíveis (aquelas apontadas por uma branch ou tag) são mantidas por 90 dias, enquanto entradas inacessíveis (aquelas não apontadas por nada) são mantidas por 30 dias. Após esses períodos, o processo de coleta de lixo (garbage collection) do Git pode removê-las.
Embora não possamos simular a passagem do tempo neste laboratório para ver as entradas expirarem naturalmente, podemos acionar manualmente a coleta de lixo do Git com uma opção específica para podar (remover) entradas antigas do reflog.
Importante: Executar este comando removerá as entradas mais antigas do reflog com base nos tempos de expiração configurados. Em um cenário do mundo real, você normalmente não precisaria executar isso manualmente, a menos que tenha um motivo específico para limpar as entradas antigas do reflog.
Primeiro, certifique-se de estar no diretório my-time-machine:
cd ~/project/my-time-machine
Agora, vamos executar o comando de coleta de lixo com a opção de poda para entradas do reflog. Definiremos um tempo de expiração muito curto para entradas inacessíveis para demonstrar o efeito.
git gc --prune=now --aggressive
Este comando diz ao Git para executar a coleta de lixo imediatamente (--prune=now) e agressivamente (--aggressive) para limpar objetos soltos e podar entradas inacessíveis do reflog.
Após executar o comando, vamos verificar o reflog novamente:
git reflog
Você pode ver que algumas entradas mais antigas, especialmente se você tiver realizado mais operações antes deste laboratório, podem ter sumido. Em nosso repositório simples com apenas duas entradas no reflog, é possível que ambas ainda estejam presentes porque são relativamente novas e uma ainda é acessível por HEAD e master. No entanto, se você tivesse um histórico mais complexo com commits inacessíveis, este comando os podaria com base nas configurações de expiração.
A principal conclusão aqui é que o reflog não é permanente para sempre. O Git limpa as entradas antigas para economizar espaço. No entanto, para fluxos de trabalho de desenvolvimento típicos, os tempos de expiração padrão geralmente são suficientes para se recuperar da maioria dos erros.
Entender que as entradas do reflog têm uma expiração ajuda você a apreciar a importância de criar commits e branches significativos para preservar pontos importantes no histórico do seu projeto.