Когда остановиться и откатиться
откат — это не поражение, а инструмент
Что это
Иногда правильный шаг — выбросить сделанное и начать заново. Это ощущается как потеря времени, поэтому откладывается до последнего — и в итоге теряется гораздо больше.
Статья о том, по каким признакам понять, что пора, и как откатиться так, чтобы не потерять полезное.
Пять признаков, что пора
| Признак | Что он значит |
|---|---|
| Третий круг одной петли | способ не работает (статья 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).
- Тесты, если успел их написать, — они переживают любой откат.
- Решения, которые оказались верными. Часто из большой неудачной правки одна-две части были правильными.
Прежде чем я откачу эти изменения: перечисли,
что из сделанного стоит сохранить, а что было тупиком.
Коротко, списком.Как начинать заново
Не повторяя тот же путь:
- Новая сессия. Старый контекст засорён (статья 4.9).
- Задача формулируется заново, с учётом того, что выяснилось. Обычно она звучит иначе, чем в первый раз, — это хороший знак.
- Сначала план (статья 3.10). Второй заход без плана часто приводит в тот же тупик.
- Меньшими шагами. Если большая правка не удалась дважды, разбей задачу на три и сделай первую.
Я пробовал сделать X, зашёл в тупик вот почему: <причина>.
Начинаем заново. Распиши планом другой подход,
и скажи, чем он лучше того, что не сработал.На что смотреть
Откат откладывается ради потраченного времени. Два часа уже потеряны в любом случае. Вопрос только в том, потеряешь ли третий.
Откатили код вместе с выводами. Потом те же грабли через неделю.
Откат без коммита. Если последний коммит был вчера, откат стоит дня работы. Это не проблема отката — это проблема коммитов.
«Почти работает» как состояние. Если эта фраза звучит третий час, она означает «не работает».
Шпаргалка
Пять признаков: третий круг · не можешь объяснить · правки растут · «почти работает» · страшно трогать.
Откат стоит столько, сколько прошло с последнего коммита.
git diffперед откатом,git stashвместо удаления,reset --hardосторожно.Забери с собой: тупики, минимальный случай, тесты, верные части.
Начинай заново в новой сессии, с планом и меньшими шагами.
Потраченное время — не причина продолжать.