Я пытаюсь очистить репо:
local FIRST_COMMIT="bf450342272a94117d78eae34a140a2a39359dad"
git branch -d bad-master
git remote remove bad-remote
git rev-parse ${FIRST_COMMIT} > .git/shallow
git fsck --unreachable
git gc --prune=now
Идея заключается в следующем:
- сохранить одну ветвь (
develop
) ветвь
- удалить все ненужные ссылки
- вырезать историю в ветке
develop
, с .git/shallow
/ gc --prune
После этого я проверил следующее:
- пульты не определены
- теги не определены
- есть одна ветка:
develop
- история в ветви
develop
действительно сокращена до указанного коммита
Но есть еще проблема:
git rev-list --all
Список коммитов, которые недоступны через ветку develop
!
Я не понимаю, почему git fsck --unreachable
не перечисляет это и почему git gc --prune=now
не удаляет эти коммиты. Единственное объяснение состоит в том, что эти коммиты достижимы , через другие ссылки. Какие из них?
Как мне определить, как достижим данный коммит?
То, что я ожидаю, это:
- определить ссылку, которую я пропустил до сих пор (филиал / удаленный / тег / ???)
- удалить эту ссылку
- после этого
prune
удалит нежелательные коммиты.