Comments 14
Будьте осторожны, так как этот способ сотрет все изменения без возможности откатить.
git reset –-hard HEAD~1
Теперь ваш последний коммит удален, как и все соответствующие изменения в коде.
Типичный пример "сначала разберитесь, потом пишите". Никуда коммит удален не будет, все, что произойдет — это текущая ветка станет указывать на предшествующий коммит. А сам коммит останется в репозитории и будет там до сборки мусора.
Делаем git reflog
, смотрим на SHA нужного коммита, git reset --hard <sha>
— и все как было. Собственно, даже reflog
делать не обязательно, иногда можно просто вверх по консольному экрану помотать.
Вот не зафиксированные изменения с помощью reset можно потерять, это да.И вот ровно о них — в этом совете и предупреждают. Тем более, что как раз в предыдущем совете речь шла про
reset
без --hard
.git reset –-hard HEAD~1
Теперь ваш последний коммит удален, как и все соответствующие изменения в коде.
Речь идет как раз о удалении коммита и вместе с ним соответствующие изменения.
git reset HEAD~1 — откатит текущую ветку на предыдущий коммит, при этом оставит файлы как есть
–-hard — приведет файлы в соответствие к текущему коммиту
Никуда коммит удален не будет, все, что произойдет — это текущая ветка станет указывать на предшествующий коммит. А сам коммит останется в репозитории и будет там до сборки мусора.Ну вообще-то там речь идёт про все изменения, а не все изменения в коммите.
ДелаемВот всё-всё-всё прям? Со всеми изменениями, которые вы никуда не залили? Где такую магическую версию git'а берут и как она работает?git reflog
, смотрим на SHA нужного коммита,git reset --hard <sha>
— и все как было.
Объедините последние Х коммитов в один
git reset HEAD~3
для такого надо интерактивный ребейз использовать. Меняй коммиты местами, сквош друг с другом, ставь в очередь на переименование и будет тебе счастье.
А для тех кто не хочет с vi/vim иметь дело надо было предложить editor в .gitconfig
поменять
Самый полезный совет на самом такой: если не уверены, к чему приведёт малознакомая команда типа reset
или rebase
, не применяйте её сразу в своей главной рабочей ветке или даже репозитории. Обязательно сначала сделайте копию, и только потом экспериментируйте. Потому что с непривычки где-нибудь да ошибётесь. Но цена ошибки будет небольшой, если она была сделана в ветке, которую не жалко грохнуть.
! — чтобы выполнить команду? Да ладно! Чтобы выполнить, нажимают Enter. А "!" ставят, чтобы не было вопроса "вы уверены?".
Как привести в порядок историю ваших коммитов в Git