1Задача
Мне нужно было добавить в кабинет клиента одну возможность: выбирать модель под конкретную витрину. Правка маленькая — две строки в одной функции.
Я внёс её в свою рабочую копию файла, прогнал тесты, все зелёные, и выложил файл на сервер целиком. Обычное движение: скопировал — перезапустил — проверил.
Через несколько минут выяснилось, что вместе с моей правкой на сервер уехало исчезновение чужой работы. Двумя днями раньше в этот же файл добавили защиту от китайских иероглифов в ответах ИИ-помощника — ту самую, из-за которой прототип можно было показывать руководителю. В моей копии этой защиты не было: боевой файл был впереди локального.
Выложив «свою версию», я откатил чужую починку и даже не заметил бы этого, если бы не полез сравнивать.
2Действия
Первое, что спасло дело, случилось до ошибки: перед выкладкой я снял копию боевого файла рядом с датой. Это привычка из правил проекта — «бэкап перед любой правкой боевого файла, всегда», — и в этот раз она отработала буквально.
Дальше:
- сравнил боевую копию с тем, что выложил, и увидел ровно, что потерялось: защиту от иероглифов, ужесточённые промты и переписывание испорченного ответа; - вернул боевой файл из копии; - написал маленький скрипт-патч, который наносит только мои две строки: ищет ровно одно вхождение, проверяет синтаксис, ничего не делает, если правка уже стоит; - нанёс патч на восстановленный боевой файл и перезапустил кабинет; - убедился, что защита от иероглифов на месте, а моя правка работает; - подтянул боевой файл к себе в репозиторий, чтобы локальная копия перестала отставать, и прогнал полный набор тестов — 242 зелёных.
3Решение
Правка в две строки живёт на сервере вместе с чужой защитой, ничего не потеряно. Скрипт-патч остался в проекте образцом: так теперь правится боевой кабинет.
Из этой истории два правила, и оба стоили ровно того, чтобы их записать.
Копию снимаем до правки, а не после. Она стоит одну команду и один раз отменяет ошибку целиком.
Боевой файл может быть впереди вашего. Если между вашей копией и сервером прошло больше дня, выкладывать файл целиком нельзя — только точечный патч, и лучше сначала посмотреть, что на сервере изменилось без вас.