Pull to refresh

Comments 14

Будьте осторожны, так как этот способ сотрет все изменения без возможности откатить.
git reset –-hard HEAD~1


Теперь ваш последний коммит удален, как и все соответствующие изменения в коде.

Типичный пример "сначала разберитесь, потом пишите". Никуда коммит удален не будет, все, что произойдет — это текущая ветка станет указывать на предшествующий коммит. А сам коммит останется в репозитории и будет там до сборки мусора.


Делаем git reflog, смотрим на SHA нужного коммита, git reset --hard <sha> — и все как было. Собственно, даже reflog делать не обязательно, иногда можно просто вверх по консольному экрану помотать.

Тоже зацепил этот момент. Такими советами можно и жизнь начинающим разработчикам подпортить. Гит ничего не удаляет никогда, что им зафиксировано. Вот не зафиксированные изменения с помощью reset можно потерять, это да.
Вот не зафиксированные изменения с помощью reset можно потерять, это да.
И вот ровно о них — в этом совете и предупреждают. Тем более, что как раз в предыдущем совете речь шла про reset без --hard.
git reset –-hard HEAD~1

Теперь ваш последний коммит удален, как и все соответствующие изменения в коде.

Речь идет как раз о удалении коммита и вместе с ним соответствующие изменения.

git reset HEAD~1 — откатит текущую ветку на предыдущий коммит, при этом оставит файлы как есть
–-hard — приведет файлы в соответствие к текущему коммиту
Никуда коммит удален не будет, все, что произойдет — это текущая ветка станет указывать на предшествующий коммит. А сам коммит останется в репозитории и будет там до сборки мусора.
Ну вообще-то там речь идёт про все изменения, а не все изменения в коммите.

Делаем git reflog, смотрим на SHA нужного коммита, git reset --hard <sha> — и все как было.
Вот всё-всё-всё прям? Со всеми изменениями, которые вы никуда не залили? Где такую магическую версию git'а берут и как она работает?
Объедините последние Х коммитов в один
git reset HEAD~3

для такого надо интерактивный ребейз использовать. Меняй коммиты местами, сквош друг с другом, ставь в очередь на переименование и будет тебе счастье.


А для тех кто не хочет с vi/vim иметь дело надо было предложить editor в .gitconfig поменять

не обязательно и в .gitconfig, можно временно:
EDITOR=nano git rebase -i HEAD~3

Самый полезный совет на самом такой: если не уверены, к чему приведёт малознакомая команда типа reset или rebase, не применяйте её сразу в своей главной рабочей ветке или даже репозитории. Обязательно сначала сделайте копию, и только потом экспериментируйте. Потому что с непривычки где-нибудь да ошибётесь. Но цена ошибки будет небольшой, если она была сделана в ветке, которую не жалко грохнуть.

! — чтобы выполнить команду? Да ладно! Чтобы выполнить, нажимают Enter. А "!" ставят, чтобы не было вопроса "вы уверены?".

У меня настроен alias на
git l
когда ещё и цветами выделяются разные вещи.
l = log --graph --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset'

Делаю это все в студии мышкой, да командная строка это круто, но когда удобно то все остальное отпадает
Тема не раскрыта/ Чтобы держать историю коммитов в красоте надо иметь четкую стратегию комментариев к коммитав и стратегию работы с ветками в процессе разработки/ а тут так просто набор команд по работе с коммитами
Sign up to leave a comment.