Программирование с ИИ
ENRU
4.10

Когда остановиться и откатиться

откат — это не поражение, а инструмент

Что это

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

Статья о том, по каким признакам понять, что пора, и как откатиться так, чтобы не потерять полезное.

Пять признаков, что пора

ПризнакЧто он значит
Третий круг одной петлиспособ не работает (статья 4.9)
Не можешь объяснить, что делает кодпотерян контроль (статья 1.1)
Правки растут, а не уменьшаютсячинится не та причина
«Почти работает» дольше часаоставшиеся 10% могут быть половиной работы
Страшно трогатькод стал непонятным даже тебе

Последний признак самый честный. Если открываешь файл и не решаешься менять — дело не в осторожности, а в том, что код перестал быть твоим.

Как откатываться

Отменить незакоммиченное

git diff                     # сначала посмотреть, что теряем
git checkout -- handlers/    # откатить папку
git checkout -- .            # откатить всё

Первая команда обязательна: перед тем как выбросить, посмотри, нет ли там чего-то полезного.

Сохранить на всякий случай

Если выбрасывать жалко:

git stash                    # убрать в сторону, вернуться к чистому
git stash list               # посмотреть, что отложено
git stash pop                # вернуть обратно

stash — это откат с возможностью передумать. Хороший выбор, когда не уверен.

Вернуться к рабочему коммиту

git log --oneline -5         # найти последний рабочий
git reset --hard <коммит>    # вернуться к нему

Что забрать с собой

Откат кода — не откат понимания. За неудачную попытку ты узнал то, чего не знал в начале, и это стоит сохранить до того, как выбросишь код:

  • Что не работает и почему. Самое ценное: попробованный тупик больше не придётся проходить.
  • Минимальный случай воспроизведения ошибки (статья 4.3).
  • Тесты, если успел их написать, — они переживают любой откат.
  • Решения, которые оказались верными. Часто из большой неудачной правки одна-две части были правильными.
Запрос
Прежде чем я откачу эти изменения: перечисли,
что из сделанного стоит сохранить, а что было тупиком.
Коротко, списком.

Как начинать заново

Не повторяя тот же путь:

  1. Новая сессия. Старый контекст засорён (статья 4.9).
  2. Задача формулируется заново, с учётом того, что выяснилось. Обычно она звучит иначе, чем в первый раз, — это хороший знак.
  3. Сначала план (статья 3.10). Второй заход без плана часто приводит в тот же тупик.
  4. Меньшими шагами. Если большая правка не удалась дважды, разбей задачу на три и сделай первую.
Запрос
Я пробовал сделать X, зашёл в тупик вот почему: <причина>.
Начинаем заново. Распиши планом другой подход,
и скажи, чем он лучше того, что не сработал.

На что смотреть

Откат откладывается ради потраченного времени. Два часа уже потеряны в любом случае. Вопрос только в том, потеряешь ли третий.

Откатили код вместе с выводами. Потом те же грабли через неделю.

Откат без коммита. Если последний коммит был вчера, откат стоит дня работы. Это не проблема отката — это проблема коммитов.

«Почти работает» как состояние. Если эта фраза звучит третий час, она означает «не работает».

Шпаргалка

  • Пять признаков: третий круг · не можешь объяснить · правки растут · «почти работает» · страшно трогать.

  • Откат стоит столько, сколько прошло с последнего коммита.

  • git diff перед откатом, git stash вместо удаления, reset --hard осторожно.

  • Забери с собой: тупики, минимальный случай, тесты, верные части.

  • Начинай заново в новой сессии, с планом и меньшими шагами.

  • Потраченное время — не причина продолжать.