Как ДЕЙСТВИТЕЛЬНО удалить ответвление мерзавца (т.е. удалить все его объекты/фиксации)?

У меня есть дерево мерзавца как

                 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/чернослив, как предполагается, удаляет все недостижимые объекты?

23
задан Brian Tompsett - 汤莱恩 6 July 2015 в 19:51
поделиться

1 ответ

Примечание от мая 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
6
ответ дан 29 November 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: