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?

questionAnswers(1)

yourAnswerToTheQuestion