У меня есть дерево мерзавца как
A---B---C topic
/
D---E---F---G master <--
Я хотел бы удалить тему и все объекты на ней.
Я отмечаю идентификатор SHA темы, затем ввожу:
git branch -D topic
git gc # <-- I also tried prune here...
git checkout -b temp <SHA1 ID of topic>
После последней команды я ожидаю получать ошибку (что-то как "Несуществующий идентификатор объекта..." или somth. как этот). Однако нет никакой ошибки, и gitk показывает ту же древовидную структуру как выше??
Что я пропускаю - я думал, что gc/чернослив, как предполагается, удаляет все недостижимые объекты?
Примечание от мая 2010 г .: Как упомянул Якуб , если ваша ветка будет объединена, тема все равно будет доступна.
Предположим, слияния не было.
Затем, как упомянуто в книге ProGit и подробно описано в этом SO-вопросе :
git gc --prune=now
должно быть достаточно (вы должны позвонить напрямую git prune
) . Вы можете контролировать это с помощью git count-objects -v
.
Изменить апрель 2012 г .: maxschlepzig в комментариях подтверждает, что могут потребоваться дополнительные шаги, как подробно описано в Duke ответе (но без репака git
).
Поэтому вместо git gc --prune now
:
git reflog expire --expire=now --all
git gc --aggressive --prune=now