Как убрать неиспользуемые боковые ветви в ваших деревьях коммитов?
Как бы вы очистили неиспользуемые боковые ветви в ваших деревьях коммитов (не настоящие 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 для сохранения всего коммита в текстовом файле.