O Git executa a coleta de lixo automaticamente :
• Se houver muitos objetos soltos no repositório
• Quando ocorre um envio para um repositório remoto
• Após alguns comandos que podem introduzir muitos objetos soltos
• Quando alguns comandos como o git reflog expiram solicitam explicitamente
E, finalmente, a coleta de lixo ocorre quando você solicita explicitamente usando o comando git gc. Mas quando deveria ser isso? Não há uma resposta sólida para essa pergunta, mas existem alguns bons conselhos e melhores práticas.
Você deve considerar executar o git gc manualmente em algumas situações:
• Se você acabou de concluir uma ramificação do filtro git. Lembre-se de que a ramificação de filtro reescreve muitas confirmações, introduz novas e deixa as antigas em uma referência que deve ser removida quando você estiver satisfeito com os resultados. Todos os objetos mortos (que não são mais referenciados desde que você acabou de remover a referência apontada para eles) devem ser removidos por meio da coleta de lixo.
• Após alguns comandos que podem introduzir muitos objetos soltos. Isso pode ser um grande esforço de rebase, por exemplo.
Por outro lado, quando você deve tomar cuidado com a coleta de lixo?
• Se houver referências órfãs que você queira recuperar
• No contexto do git rerere e você não precisa salvar as resoluções para sempre
• No contexto de apenas tags e ramificações serem suficientes para fazer com que o Git retenha um commit permanentemente
• No contexto de recuperações FETCH_HEAD (recuperações diretas por URL via git fetch) porque elas estão imediatamente sujeitas à coleta de lixo