Почему «пропали» коммиты?
Главная ошибка — использование
--amend во время
rebase.
Команда
git commit --amend не создает новый коммит, а перезаписывает предыдущий.
Когда вы время интерактивного
rebase на каждом шаге делаете
--amend, вы по сути всё время заменяете один и тот же коммит. Остальные коммиты, которые Git должен был «применить» в процессе ребейза, просто исчезают, потому что их заменили.
Как делать правильно?
Во время
rebase -i вместо
amend нужно:
git add <файлы> # главное проиндексировать правки файлов
git rebase --continue # тут гит уже сам сделает git commit --no-edit
Вручную делать
git commit перед
continue имеет смысл только если вы хотите поменять ещё и сообщение коммита.
Как восстановить утерянные коммиты
Git не удаляет коммиты сразу. Они остаются в репозитории и доступны в
reflog — журнале ссылок.
Их можно найти так:
git reflog
Затем восстановить ветку:
git reset --hard <хеш_из_reflog>
Вывод
Это не баг Git, а ожидаемое поведение. Просто
rebase + amend — взрывоопасная смесь, особенно если не до конца понимать, что происходит.