- Главная
- Искусственный интелект
- Сброс проекта в чистое состояние для практики
Сброс проекта в чистое состояние для практики
Практика строится на повторении, а повторение требует быстрого и безопасного возврата к началу. Если после каждого упражнения проект накапливает изменения, лишние файлы и пробные данные, он постепенно превращается в непредсказуемую среду, где результат перестаёт быть воспроизводимым. В этом уроке научимся возвращать проект в чистое состояние — так, чтобы любое упражнение можно было проходить многократно с одной и той же отправной точки.
Зачем сбрасывать проект в чистое состояние
Предыдущий урок закончился на том, что в базе появилась таблица users. Через несколько упражнений в проекте будут новые файлы, изменённые скрипты, тестовые данные и, возможно, неудачные эксперименты. Каждое изменение — это «грязь», которая копится поверх предыдущей и искажает следующий эксперимент.
Чистое состояние решает три задачи.
- Повторяемость — каждое упражнение начинается с одинакового набора файлов и одинаковой базы, поэтому результат зависит только от ваших действий.
- Предсказуемость — агент работает с известной структурой проекта, а не с «тем, что вчера кто-то изменил».
- Безопасность — сломанный эксперимент не тянется за вами: один сброс — и проект снова в порядке.
Сброс — это не признак неудачи, а штатный инструмент.
Профессиональный подход как раз в том, чтобы уметь быстро откатываться и пробовать снова: чем дешевле стоит эксперимент, тем смелее вы экспериментируете.
Что такое чистое состояние
- Код на известном коммите — рабочая копия совпадает с последним закоммиченным состоянием, лишних изменений нет.
- База в начальном виде — таблицы созданы миграциями, пробных и мусорных данных нет.
- Зависимости установлены — папка node_modules на месте, проект запускается.
- Временные файлы удалены — логи, кэш и прочий мусор не мешают работе.
Важно понимать: чистое состояние — это не «пустой проект», а «известное состояние проекта». База с таблицей users — нормальное чистое состояние, если она создана миграциями. Главное, чтобы состояние было определённым и воспроизводимым, а не «ну, вроде всё очистилось».
Запишите своё определение чистоты в файл прямо в проекте, например в CONTEXT.md или в шапке AGENTS.md: какие команды приводят проект к чистому состоянию и как это проверить. Тогда и вы, и агент будете работать по единому стандарту, а не по ощущениям.
Сброс изменений через git
Первый слой грязи — изменения в файлах. Их убирает git. Начнём с проверки, что вообще изменилось с последнего коммита.
git status
Команда покажет изменённые и новые файлы. Если изменений нет — рабочая копия уже чистая, можно переходить к базе. Если есть — возвращаем файлы к состоянию последнего коммита.
Возврат к последнему коммиту
Команда git reset --hard приводит отслеживаемые файлы к состоянию коммита, на который указывает HEAD — «голова» ветки, то есть последний сохранённый коммит.
git reset --hard HEAD
>После этой команды изменённые файлы вернутся к виду последнего коммита.
git reset --hard уничтожает незакоммиченные изменения безвозвратно — восстановить их нельзя, поэтому перед сбросом убедитесь, что нужная работа закоммичена.
Удаление незакоммиченных файлов
git reset --hard убирает изменения в отслеживаемых файлах, но не трогает новые файлы, которые git ещё не знает. Такие файлы — результаты пробных запусков, черновики, случайно созданные скрипты — удаляет команда git clean.
git clean -fd
Флаги означают: -f — применить удаление (без него команда только показывает, что удалила бы), -d — удалять и непустые папки. Вместе с git reset --hard эта команда гарантирует, что рабочая копия точно совпадает с последним коммитом.
| Команда | Что делает |
|---|---|
git status |
Показывает изменённые и новые файлы |
git reset --hard HEAD |
Возвращает отслеживаемые файлы к последнему коммиту |
git clean -fd |
Удаляет новые, ещё не отслеживаемые файлы и папки |
Сброс базы данных
Второй слой грязи — данные. За время упражнений в базе появляются пробные записи: тестовые пользователи, заказы, результаты экспериментов. Для учебного проекта правильный способ очистить базу — удалить файл базы и создать структуру заново миграциями.
rm data.db
npm run migrate:up
Первая команда удаляет файл базы вместе со всеми данными, вторая — пересоздаёт структуру из миграций: таблицу schema_migrations и таблицу users. Результат — база в точно таком же виде, как после первого запуска миграций.
Почему удаление файла — нормальный подход именно для учебного проекта? Потому что в нём нет ценных данных: всё, что нужно, воссоздаётся миграциями за секунды. В рабочем проекте такой способ недопустим — там сброс означает резервные копии и отлаженные скрипты. Но для практики удаление файла базы — самый быстрый способ получить «базу как новую».
Проверьте, что файл базы не попал в коммиты: добавьте data.db в .gitignore ещё на этапе настройки проекта. Если база однажды закоммитится, чистое состояние станет недостижимым — в репозитории навсегда останется копия с вашими пробными данными.
Полный сброс одной командой
Сбрасывать проект тремя командами каждый раз — медленно, и легко что-то пропустить. Правильное решение — собрать сброс в один скрипт. Добавим в package.json команду reset.
{
"scripts": {
"reset": "git reset --hard HEAD && git clean -fd && rm -f data.db && npm run migrate:up"
}
}
Теперь полный возврат проекта в чистое состояние — одна команда.
npm run reset
Разберём, что происходит: git возвращает файлы к последнему коммиту, убирает новые файлы, удаляет базу и пересоздаёт её миграциями. Четыре операции, которые раньше нужно было помнить и вводить по отдельности, теперь выполняются одним словом.
Скрипт сброса — отличный кандидат для делегирования агенту: задача описывается одним предложением с критерием приёмки. Агент напишет скрипт, вы проверите, что он делает ровно то, что задумано, и закоммитите.
Как проверить результат
Сброс — это шаг, а у шага есть критерий приёмки. Чистое состояние проверяется тремя проверками.
- git status — пустой вывод, рабочая копия совпадает с последним коммитом.
- .tables — в базе только
schema_migrationsиusers, без мусорных таблиц и пробных записей. - npm test — проект запускается, проверки проходят, сброс ничего не сломал.
Команда для проверки базы:.
sqlite3 data.db ".tables"
Если сброс выполнен верно, вывод покажет две таблицы. Если там остались таблицы из экспериментов — значит, база не была удалена, и скрипт сброса нужно поправить. После успешной проверки закоммитьте сам скрипт сброса, чтобы он стал частью проекта.
git add .
git commit -m "Шаг: добавлен скрипт полного сброса npm run reset"
Агент и сброс
Первое: перед сбросом всегда проверяйте git status. Если в рабочей копии есть незакоммиченные изменения, которые вам нужны, — закоммитьте их до сброса. Правило «сначала коммит, потом сброс» защищает от потери работы, которую невозможно восстановить.
Второе: агент выполняет сброс, а вы проверяете результат по критерию.
- Проект накопил изменения после упражнений.
- Выполни сброс: команда
npm run reset. - Критерий приёмки:
git statusпустой,sqlite3 data.db ".tables"показывает толькоschema_migrationsиusers,npm testпроходит.
Обратите внимание: запрос указывает не только действие, но и способ проверки. Агент сбрасывает, вы проверяете по критерию — тот же цикл, что и в любом другом упражнении курса.
Типичные ошибки
- Сброс без проверки
git status— потеряна незакоммиченная работа. - Забыли удалить базу — пробные данные переживают сброс кода.
- Применение
git reset --hardк нужным изменениям без предварительного коммита. - Нет скрипта сброса — каждая очистка вручную, что-то обязательно пропускается.
- Файл базы закоммичен в репозиторий — чистое состояние недостижимо.
- Отсутствие проверки после сброса: «вроде очистилось» вместо
git statusи.tables.
Самая дорогая ошибка — потеря незакоммиченной работы. git reset --hard и git clean не спрашивают разрешения и не кладут файлы в корзину: удалённое исчезает навсегда. Единственная страховка — дисциплина: посмотреть git status, нужное закоммитить и только потом сбрасывать.
Сделайте сброс привычкой в начале каждого упражнения, а не по необходимости в конце. Двадцать секунд на npm run reset перед стартом гарантируют, что вы работаете с известным состоянием проекта, а не с продолжением прошлого эксперимента. Это особенно важно, когда с проектом работает агент: он должен видеть стабильную отправную точку.
Итоги
Чистое состояние — это известное состояние: код на последнем коммите, база, пересозданная миграциями, и скрипт, который приводит проект к этому виду одной командой. Сброс возвращает проекту предсказуемость и делает практику многократной и безопасной.
В следующем уроке установим recorder — инструмент, который записывает запросы между агентом и моделью, чтобы видеть расход контекста и отлаживать работу агента.
Глоссарий
- Чистое состояние — известное, воспроизводимое состояние проекта, готовое к новому упражнению.
- Рабочая копия — текущее состояние файлов на диске.
- Коммит — зафиксированная точка в истории изменений git.
- HEAD — указатель на последний коммит текущей ветки.
- git status — команда, показывающая изменения в рабочей копии.
- git reset —hard — команда возврата файлов к состоянию указанного коммита.
- git clean -fd — команда удаления новых, не отслеживаемых файлов и папок.
- Незакоммиченные изменения — правки, которые не сохранены в истории git.
- .gitignore — файл со списком путей, которые git не отслеживает.
- База данных — хранилище данных проекта, в курсе — файл data.db.
- Миграция — файл с изменением структуры базы, оформленный как шаг истории.
- schema_migrations — служебная таблица со списком применённых миграций.
- npm run reset — скрипт полного сброса проекта в чистое состояние.
- Критерий приёмки — условие, по которому задача считается выполненной.
- node_modules — папка установленных зависимостей проекта.
- Продакшен — рабочая среда, в которой проект используется реальными пользователями.
- Recorder — инструмент записи запросов между агентом и моделью (тема следующего урока).