Задать вопрос
@MagDarkElf

Как вернуть коммиты после rebase?

Есть локальный репозиторий с несколькими коммитами. Репозиторий никуда не пушился, всё только на моей машине.

Я экспериментировал с git rebase — запускал интерактивный ребейз, менял коммиты, продолжал и т.д. Через несколько итераций заметил, что пропало 16 коммитов.

Важно:
— Это не случай с пустыми коммитами, которые Git удаляет автоматически.
— Изменения из этих коммитов в коде остались, но сами коммиты исчезли из истории.

Это баг Git? Или можно как-то вернуть пропавшие коммиты?
  • Вопрос задан
  • 822 просмотра
Подписаться 2 Простой 5 комментариев
Решения вопроса 2
@sand3001
Всего по немногу
Просмотреть все коммиты можно используя git reflog
Ответ написан
Комментировать
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Почему «пропали» коммиты?

Главная ошибка — использование --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 — взрывоопасная смесь, особенно если не до конца понимать, что происходит.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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