Quando exatamente o git remove objetos: por que o “git gc” não remove as confirmações?
Estou trabalhando em um curso git e queria mencionar que os árbitros perdidos não são realmente perdidos até a execuçãogit gc
. Mas, ao verificar isso, descobri que não é esse o caso. Mesmo depois de corrergit gc --prune=all --aggressive
os árbitros perdidos ainda estão lá.
Claramente eu entendi algo errado. E antes de dizer algo incorreto no curso, quero esclarecer meus fatos! Aqui está um exemplo de script que ilustra o efeito:
#!/bin/bash
git init
# add 10 dummy commits
for i in {1..10}; do
date > foo.txt
git add foo.txt
git commit -m "bump" foo.txt
sleep 1
done;
CURRENT=$(git rev-parse HEAD)
echo HEAD before reset: ${CURRENT}
# rewind
git reset --hard HEAD~5
# add another 10 commits
for i in {1..10}; do
date > foo.txt
git add foo.txt
git commit -m "bump" foo.txt
sleep 1
done;
Este script adicionará 10 confirmações fictícias, redefinirá para 5 confirmações anteriores e adicionará outras 10 confirmações. Antes de redefinir, ele imprimirá o hash do HEAD atual.
Eu gostariaEspero perder o objeto emCURRENT
depois de corrergit gc --prune=all
. Ainda posso corrergit show
nesse hash.
Eu entendo que depois de corrergit reset
e adicionando novas confirmações, criei essencialmente uma nova ramificação. Mas meu ramo original não tem mais nenhuma referência, portanto, não aparece emgit log --all
. Também não seria enviado a nenhum controle remoto, suponho.
Meu entendimento degit gc
foi que remove esses objetos. Este não parece ser o caso.
Por quê? Equando exatamente, y fazgit gc
remover objetos?