Назад в блог

Генератор git undo: точная команда для вашего бардака

25 сентября 2026 г.

Один коллега отвечал «git reset —hard» на любой вопрос об отмене — как другие отвечают «выключи и включи». Дважды прокатило. На третий раз заплатили пятницей после обеда и уроком reflog, который никто не вспоминает с теплом. Хаб Undo Anything in Git на этом сайте вырос из той недели — сегодня к нему добавился полноценный инструмент.

Генератор git undo запущен: три вопроса на входе, одна точная команда на выходе. Без аккаунта, без загрузок — всё работает в вашем браузере. Скажите, был ли commit запушен, сохраняете ли вы изменения и тянет ли ветку кто-то ещё — он напечатает правильный git reset, git revert или спасение через reflog, с предупреждением там, где команда кусается.

Зачем инструмент для четырёх команд?

Потому что поисковые данные говорят: людям нужен ответ, а не эссе. Google Search Console показывает этот сайт на позиции 12.3 по запросу «git reset last commit keep changes» — 27 показов за неделю, ноль кликов. Запрос кричит «дайте команду», а ищущий пролистывает всё, что заставляет его читать. Генератор отвечает на одном экране.

Тот же паттерн повторяется во всех вариантах: «and keep changes», «but keep changes», «keep the file». Никто не пишет диссертацию про версионирование. У них бардак прямо сейчас, и им нужен кратчайший выход.

Как генератор решает

Три вопроса, взятые прямо из руководства revert против reset:

  1. Где коммит? Не запушен, запушен или потерян совсем.
  2. Что с изменениями? Оставить застейдженными, оставить незастейдженными или выбросить.
  3. Кто ещё тянет эту ветку? Вопрос, отделяющий чистый rewrite от командного инцидента.

Вопрос про общую ветку — это и есть весь инструмент. Остальное — удобство; это — минимизация ущерба.

Его ответы целиком:

КомандаИсторияРабочее деревоОбщая ветка?
git reset --soft HEAD~1откат на 1изменения сохранены, в стейдженет — rewrite
git reset HEAD~1откат на 1изменения сохранены, вне стейджанет — rewrite
git reset --hard HEAD~1откат на 1изменения выброшенынет — деструктивно
git revert HEADдобавляет отменяющий коммитне тронутода — безопасный ход
git reflog + git switch -c recovery <sha>ничего не потеряновосстановлено из reflogспасение после чего угодно

Команды, которые он печатает

Все случаи, которые покрывает генератор, в копипаст-виде:

# закоммичено, не запушено, сохранить изменения в стейдже
git reset --soft HEAD~1

# закоммичено, не запушено, сохранить изменения вне стейджа
git reset HEAD~1

# запушено, ветку тянут другие — единственный вежливый откат
git revert --no-edit HEAD~1..HEAD
git push

# закоммичено и потеряно — reflog помнит ~90 дней
git reflog
git switch -c recovery <sha-из-списка>

Форма диапазона HEAD~1..HEAD откатывает ровно названные коммиты без пересоздания по одному — стоит знать её, даже когда инструмент печатает её за вас.

Под капотом

Логика — таблица решений, никакой магии. Три вопроса дают восемнадцать комбинаций; большинство схлопывается в одну и ту же горстку команд, потому что «не запушено + выбросить» и «запушено + ветка моя + выбросить» различаются только хвостом force-with-lease. Страница — статический маршрут: без сервера, без аналитики, без cookie. Она откроется на телефоне в серверной — там и случается большинство git-аварий, — а кнопка копирования отдаёт блок целиком с предупреждающими комментариями.

Что он сознательно не делает

Никакой помощи с интерактивным rebase — если вы переставляете коммиты, вы знаете больше, чем учит инструмент. Никакой хирургии stash; у неё есть собственное руководство. И он отказывается угадывать: когда ситуация «запушено в общую ветку», единственная команда на выбор — revert, потому что альтернативы сжигают команды. Длинное руководство по отмене коммита объясняет, что каждый flag делает с reflog; инструмент просто не даёт выбрать неправильный на скорости.

Исходники на github.com/mrsaynothing/git-undo — чистые HTML и JavaScript, без сборки, без зависимостей. Форкайте, меняйте стиль, забирайте мои формулировки. Версия на этом сайте гоняет ту же логику статической страницей SvelteKit.

Если он сэкономит вам одну сессию с reflog в этом году — он окупил вечер, который на него ушёл. Если даст неверный ответ в вашем случае, для этого и существуют issues в репозитории.

FAQ

Что делает генератор git undo?

Задает три вопроса — был ли commit запушен, сохраняете ли вы изменения, тянет ли кто-то ещё эту ветку — и печатает точную команду: reset, revert или спасение через reflog.

Безопасен ли git reset --hard?

Для незапушенных коммитов — да: выброшенная работа остаётся доступной через git reflog примерно 90 дней. В общей ветке — никогда: используйте revert.

Нужен ли аккаунт для инструмента?

Нет. Это статическая страница, всё работает в браузере — ничего не загружается и не логируется.

— mrsaynothing

— mrsaynothing

Сборки, поломки и то, что реально доехало.

Обсудить этот пост на dev.to dev.to ↗

Следующий лог сборки — на почту

Одно письмо на пост. С доказательствами и ошибками.

self-hosted · никаких третьих сторон · отписка в один клик

что это?

Мой агент опубликовал закрытый пост. Он висел день.

Нравятся заметки? Я зарабатываю этим на жизнь. получать рассылку