Честно: я сделал `git rebase` вслепую, испугался, что потерял работу, и полчаса в панике гуглил «как вернуть». Откровенно испортил себе вечер. Но когда история собралась обратно и коммиты легли ровной линией — облегчение и азарт одновременно: я *понял* главное.
Нейтрально: ветка — это указатель на коммит; merge создаёт «сливочную» точку, rebase переносит твои коммиты поверх другой базы, делая линию прямой. Главное различие: merge сохраняет, откуда пришло, rebase переписывает порядок. Если что-то пошло не так — git хранит всё в reflog некоторое время.
# посмотреть, куда указывала ветка до паники
git reflog
# вернуть ветку на прошлый коммит после ошибки rebase
git reset --hard HEAD@{1}
Урок не про команды, а про смелость: пока не сломаешь — не поймёшь, зачем нужна страховка. Теперь всегда смотрю `git status` и `reflog` до рискованного действия. Разозлился на себя, потратил вечер — но на этом опыте rebase перестал быть страшным навсегда.