Как убрать неиспользуемые боковые ветви в ваших деревьях коммитов?

Как бы вы очистили неиспользуемые боковые ветви в ваших деревьях коммитов (не настоящие git-ветки)?

Пример (дерево, fake-commit-hash, сообщение о фиксации, необязательно [указатели]):

*    0001 last commit [master] [origin/master] [HEAD]
| *  0002 old, unused merge
|/|
* |  0003 some remote commits
* |  0004 another commit from remote
| *  0005 old, unused commits
|/
*    0006 old tree

Путь 0001, 0003, 0004, 0006 должен оставаться без изменений, но коммиты 0002 и 0005 не являются полезными и не приносят никакой пользы. Как вы удаляете коммиты 0002 и 0005?

1 ответ

Решение

tarsius написал в ответе на другой вопрос:

git reflog expire --expire=now --all
git gc --prune=now

который очищает reflog, а затем очищает хранилище. Очистка reflog на первых порах не всегда работает, потому что значимые коммиты, отмеченные reflog, сохраняются git-gc до тех пор, пока срок действия журнала не истечет (по умолчанию это 90 дней).

После всего этого, насколько я понял, все оборванные коммиты действительно исчезли. Так что нужно быть уверенным, что они все больше не нужны. Если кто-то действительно хочет сохранить некоторые из висячих коммитов, он может:

git checkout <dangling_commit_id>
git branch <new_branch_name_of_your_choice>

или используйте git format-patch для сохранения всего коммита в текстовом файле.

Другие вопросы по тегам