#Первое изменение: от запроса до коммита
Начальный уровень · Урок 3 из 5 · около 20 минут · Нужно: Режимы разрешений и режим планирования · Сверено с Claude Code v2.1.285 (stable) 05.10.2026
#Цель
К концу урока вы сможете провести одно изменение от запроса до коммита: исследовать, спланировать, реализовать, протестировать, просмотреть diff, поправить и закоммитить.
#Что понадобится
- Ваша копия шаблона для практики и Node.js LTS (в Codespace на вашей копии он есть).
- Если хотите практиковаться в своём репозитории, всё равно оставьте копию шаблона: проверка запускается из неё. Подготовьте в репозитории папку
.practice/, как описано в уроке 1, если ещё не сделали этого. - Отсутствие незакоммиченных изменений там, где вы практикуетесь. Если изменение из урока 2 всё ещё там, уберите его в сторону командой
git stash push --include-untracked -m b-2; в своём репозитории лучше закоммитьте его, если хотите сохранить. Следующие уроки не используют отложенное, аgit stash listего покажет. - Расход лимита: небольшой.
#Идея
Попросить изменение и принять всё, что вернулось, — так сессии и идут не туда. Лучшие практики Anthropic рекомендуют четыре фазы: исследовать, спланировать, реализовать и закоммитить. Этот урок добавляет проверку на каждом шаге:
- Исследуйте в режиме планирования: Claude читает и отвечает, ничего не меняя.
- Спланируйте и одобряйте план, только когда он совпадает с тем, что вам нужно.
- Реализуйте, одобряя правки по мере их появления.
- Протестируйте: о том, что изменение работает, говорят тесты, а не сводка, которую пишет Claude.
- Просмотрите diff строка за строкой.
- Поправьте простыми словами всё, что вам не нравится.
- Закоммитьте, чтобы изменение было сохранено и его легко было откатить.
#Разбор примера
Приложение для практики проверяет ссылки в Markdown, но пропускает любую ссылку с заголовком, например [setup](setup.md "Setup guide"). Вы это исправите.
- Запустите
claudeв своей копии для практики и нажимайтеShift+Tab, пока в строке состояния не появится⏸ plan mode on. Исследуйте:
How does this app find links in a Markdown file? Which kinds of links would it miss?
Формулировки у вас будут другими, но Claude должен указать на src/links.js и упомянуть ссылки с заголовком.
2. Спланируйте:
Plan a change so links with a title, like [setup](setup.md "Setup guide"), are checked too. Add a test for it to test/links.test.js.
Прочитайте план. Если в нём названы только src/links.js и test/links.test.js, выберите Yes, manually approve edits. Если названы и другие файлы, верните его, как в уроке 2: в Tell Claude what to change попросите Claude ограничиться этими двумя файлами.
3. Реализуйте и протестируйте. Одобряйте каждую правку. Claude также спрашивает перед большинством команд, например перед запуском тестов: читайте каждую. Отвечайте простым Yes, когда команда делает то, что нужно по плану, как в уроке 2. Отвечайте No и говорите, что делать вместо этого, когда она делает больше, — например команда, которая убирает изменения в stash, перезаписывает или перемещает файлы. Не выбирайте Yes, and switch to auto mode: тогда остальные шаги урока проверяли бы фоновые проверки безопасности, а не вы (Choose a permission mode). Затем попросите, даже если Claude уже запускал тесты, чтобы увидеть результат самим:
run the tests
Claude Code сворачивает длинный вывод команды в короткую сводку. Нажмите Ctrl+O, чтобы развернуть его (Interactive mode), найдите итог тестов в конце и нажмите Esc, чтобы вернуться. Там должно быть fail 0.
4. Просмотрите diff. Наберите /diff, чтобы увидеть изменения Claude рядом со всем остальным, что вы не закоммитили (Interactive mode). Откроется один из двух видов:
- Панель рядом с разговором. В её списке тестовые файлы скрыты, пока вы не щёлкнете по строке с их количеством, так что щёлкните по ней. Панель может открыться и сама, как только Claude отредактирует файлы: если она уже открыта, читайте там, потому что ввод /diff её закрывает.
- Список над промптом. Выберите файл стрелками, нажмите Enter, чтобы прочитать его diff, и Esc, чтобы вернуться.
Читайте каждую строку, включая тест. Во втором терминале git diff выводит незакоммиченные изменения файлов, которые git уже отслеживает. Чтобы увидеть новый файл, созданный Claude, сначала выполните git add -N <file> (git add).
5. Поправьте. Прочитайте новый тест. Если он покрывает только заголовки в двойных кавычках, попросите:
The test covers only double-quoted titles. Add a case for a single-quoted title, like [faq](faq.md 'FAQ'), and run the tests again.
Если одинарные кавычки уже покрыты, попросите другое небольшое изменение, которое вам было бы нужно, например отдельный тест для каждого вида заголовка. Затем снова проверьте diff. 6. Закоммитьте:
commit this with a message that says what changed
Claude спросит перед запуском коммита. Прочитайте команду целиком, затем выберите Yes. Если он заодно создаст ветку — ничего страшного: проверка работает на любой ветке. Чтобы коммит остался на текущей ветке, скажите об этом в промпте. Затем во втором терминале сохраните коммит для проверки и убедитесь, что ничего не осталось:
git rev-parse HEAD > .practice/b-3-commit.txt
git status
git status заканчивается строкой nothing to commit, working tree clean.
#Ваша очередь
Повторите пример со вторым пробелом: ссылки, чья цель записана в угловых скобках, например [my notes](<my notes.md>).
- Исследуйте в режиме планирования: спросите, как приложение читает цель ссылки.
- Спланируйте изменение с тестом в
test/links.test.js. Верните план, если в нём названы другие файлы, затем одобрите его вариантом Yes, manually approve edits. - Одобряйте правки и команды запуска тестов ответом Yes, затем попросите Claude запустить тесты.
- Просмотрите весь diff через
/diff, включая тестовый файл. - Попросите одну поправку, пусть даже небольшую, и снова проверьте diff.
- Когда поправка внесена, попросите Claude закоммитить изменение, его тест и вашу поправку вместе. Затем во втором терминале выполните
git rev-parse HEAD > .practice/b-3-commit.txt.
В своём репозитории выберите собственное небольшое изменение, к которому прилагается тест.
#Проверка
Урок пройден, когда выполнено всё это:
- Коммит, указанный в
.practice/b-3-commit.txt, меняет тестовый файл и хотя бы ещё один файл:git show --stat $(cat .practice/b-3-commit.txt). Windows:git show --stat (Get-Content .practice/b-3-commit.txt). - Тесты проходят:
npm testсообщаетfail 0. - Ничего не осталось незакоммиченным:
git status --porcelainничего не выводит. - Самопроверка (не тестируется): вы прочитали весь diff до коммита и попросили Claude хотя бы об одной поправке.
Во втором терминале запустите npm run check -- b-3 в своей копии для практики. Если работаете в своём репозитории, запустите вместо этого npm run check -- b-3 --dir <your repo> из копии для практики. Если в том репозитории нет скрипта npm test, сначала сохраните код выхода своей команды тестов: <your test command>; echo $? > .practice/b-3-tests.txt (Windows: <your test command>; $LASTEXITCODE > .practice/b-3-tests.txt).
Если коммит не меняет ни одного тестового файла или меняет только тесты, код и его тест не попали в один коммит: попросите Claude дополнить коммит недостающим тестом (git commit --amend) или объединить два последних коммита в один, если вы ещё их не запушили. Затем снова сохраните коммит командой git rev-parse HEAD > .practice/b-3-commit.txt. Если тесты падают, прочитайте первое падение и попросите Claude исправить код, а не тест. Если git status --porcelain выводит файлы, закоммитьте их или уберите в сторону через git stash push --include-untracked.
#Что дальше
- Common workflows: пошаговые руководства по исправлению багов, рефакторингу и тестированию.
- Prompt library: готовые промпты с метками по задачам.
- Give Claude a way to verify its work: почему тест лучше сводки.
Источники: Best practices · Choose a permission mode · Interactive mode · Commands · git add
← Режимы разрешений и режим планирования · Оглавление Начального уровня · Как удержать сессию в рамках → · Тема: Разрешения и безопасность · Застряли на уроке?