¿Cuándo exactamente git poda los objetos: por qué "git gc" no elimina commits?

Estoy trabajando en un curso de git y quería mencionar que los árbitros perdidos no se pierden realmente hasta que se ejecutangit gc. Pero al verificar esto, descubrí que este no es el caso. Incluso después de corrergit gc --prune=all --aggressive los árbitros perdidos todavía están allí.

Claramente entendí mal algo. Y antes de decir algo incorrecto en el curso, ¡quiero aclarar mis hechos! Aquí hay un script de ejemplo que ilustra el efecto:

 #!/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 agregará 10 confirmaciones ficticias, se restablecerá a 5 confirmaciones en el pasado y agregará otras 10 confirmaciones. Justo antes de reiniciar, imprimirá el hash de su HEAD actual.

me gustaríaesperar perder el objeto enCURRENT despues de corrergit gc --prune=all. Sin embargo, todavía puedo corrergit show en ese hash

Entiendo que después de corrergit reset y agregando nuevos commits, esencialmente he creado una nueva rama. Pero mi rama original ya no tiene ninguna referencia, por lo que no aparece engit log --all. Tampoco sería empujado a ningún control remoto, supongo.

Mi comprensión degit gc fue eso quita esos objetos. Este no parece ser el caso.

¿Por qué? Ycuando exactamente, sígit gc eliminar objetos?

Respuestas a la pregunta(1)

Su respuesta a la pregunta