# Работа с Git через Claude Code: руководство для начинающих

> Полное практическое руководство по интеграции Git и Claude Code: умный стейджинг, автоматические описания коммитов, разрешение конфликтов слияния, GitHub CLI и стандарты безопасности.

## 1. Что такое интеграция Git в Claude Code

Claude Code обладает глубокой нативной интеграцией с системой контроля версий Git. В отличие от веб-интерфейсов нейросетей, куда разработчик вынужден вручную копировать вывод команд `git diff` или `git status`, терминальный агент Claude Code напрямую взаимодействует с вашим локальным репозиторием через встроенный инструментарий выполнения команд.

Агент исследует структуру изменений, считывает историю проекта, адаптируется под принятые в команде стандарты наименования и берет на себя рутинные операции: создание изолированных веток, выборочный стейджинг файлов, чистый ребейз и генерацию исчерпывающих описаний для Pull Request.

```mermaid
flowchart TD
    A["Запрос разработчика:<br><i>'Commit current changes'</i>"] --> B["Claude Code CLI"]
    B --> C["git status<br><i>(Проверка измененных файлов)</i>"]
    B --> D["git diff<br><i>(Анализ логики и содержания)</i>"]
    B --> E["git log -n 5<br><i>(Определение конвенций коммитов)</i>"]
    C & D & E --> F["Интеллектуальный стейджинг<br><i>(Выборочный git add &lt;file&gt;)</i>"]
    F --> G["Генерация описания коммита<br><i>(Контекстный feat/fix)</i>"]
    G --> H{"Подтверждение пользователя"}
    H -->|Одобрено| I["Выполнение git commit"]
    H -->|Корректировка| J["Обновление сообщения"]
```

### Преимущества работы с Git через Claude Code

| Критерий | Традиционный ручной Git | Работа через Claude Code |
| :--- | :--- | :--- |
| **Анализ изменений** | Ручной просмотр каждого файла через `git diff` | Автоматическое понимание семантики и зависимостей между файлами |
| **Описание коммитов** | Часто неинформативные фразы вроде *"update"*, *"fix bug"* | Структурированные сообщения по стандарту Conventional Commits |
| **Стейджинг** | Риск случайно добавить секреты или логи через `git add .` | Точечный стейджинг только актуальных файлов исходного кода |
| **Конфликты слияния** | Сложный ручной разбор маркеров `<<<<<<<` в редакторе | Интеллектуальный синтез с сохранением бизнес-логики обеих веток |
| **Создание PR** | Ручное заполнение заголовка, описания и чеклиста тестирования | Автогенерация подробного описания через связку с `gh CLI` |

> [!NOTE]
> Claude Code выполняет команды в изолированном контексте вашего локального репозитория и обязательно запрашивает подтверждение перед действиями, изменяющими файлы или переписывающими историю.

---

## 2. Создание коммитов: интеллектуальный стейджинг и описание

Наиболее частый ежедневный рабочий процесс любого разработчика — фиксация изменений в репозитории. Вместо последовательного ввода трех-четырех команд в терминале вы можете обратиться к Claude Code одной фразой на естественном языке:

```bash
Commit these changes with a descriptive message
```

### Что происходит под капотом

Когда Claude получает инструкцию зафиксировать изменения, он запускает системную диагностику:

1. **Диагностика рабочего дерева:** выполняет `git status`, чтобы получить список измененных, удаленных и новых неотслеживаемых файлов.
2. **Семантический анализ кода:** запускает `git diff` для изучения измененных строк, отделяя логику от правок форматирования.
3. **Изучение стиля репозитория:** проверяет `git log -n 5`, выявляя принятые конвенции (например, `feat(auth): ...` или лаконичные предложения).
4. **Точечный стейджинг:** добавляет в индекс Git только те файлы, которые относятся к текущей задаче, пропуская локальные конфиги и переменные окружения.
5. **Формулирование сообщения:** составляет емкий заголовок и развернутое описание, объясняющее суть и причину изменений.

:::tabs
@tab Conventional Commits
```text
feat(cart): implement instant item quantity counter in navbar

- Add reactive useCartCount hook to synchronize state across tabs
- Optimize database query to aggregate item count in a single request
- Add unit tests for edge cases when cart contains empty items
```
@tab Лаконичное описание (Simple)
```text
fix: resolve race condition in token refresh flow

Prevent multiple parallel requests from triggering duplicate OAuth
refresh cycles when access token expires.
```
@tab С привязкой к таскам (Jira/Linear)
```text
PROJ-412: refactor notification worker queue

Migrate Redis connection pool to cluster mode to handle burst traffic.
Closes #184.
```
:::

> [!TIP]
> Если вам нужно зафиксировать только один конкретный файл, укажите это прямо в промпте: `Commit only the changes in src/components/Header.tsx with an appropriate message`.

---

## 3. Работа с ветками и переключение контекста

Изоляция разрабатываемой функциональности в отдельных ветках — ключевое правило командной разработки. Claude Code позволяет одновременно создать ветку и сразу приступить к решению задачи без постоянного переключения между терминалом и редактором.

### Создание и переключение веток

```bash
# Создать новую ветку и перейти на нее
Create a new branch named feature/instant-search and switch to it
```

Claude автоматически выполнит команду `git checkout -b feature/instant-search` (или `git switch -c`).

### Совмещение создания ветки с реализацией задачи

Максимальная продуктивность достигается, когда вы объединяете намерение создать ветку с постановкой инженерной задачи:

```bash
Create a branch called fix/email-validation, then fix the regex check in the signup form and write a test for it
```

### Общепринятые префиксы для веток

- `feature/` или `feat/` — новая функциональность или UI-компонент (например, `feature/stripe-payments`).
- `fix/` или `bugfix/` — исправление дефекта (например, `fix/oauth-redirect`).
- `refactor/` — рефакторинг кода без изменения внешнего поведения (например, `refactor/user-service`).
- `chore/` — обновление зависимостей, конфигов сборки или документации (например, `chore/upgrade-nextjs-15`).

---

## 4. Разрешение конфликтов слияния (Merge Conflicts)

Конфликты слияния возникают, когда один и тот же участок кода был одновременно изменен в двух параллельных ветках. Ручное разрешение таких ситуаций часто приводит к случайной потере полезного кода или синтаксическим ошибкам.

Claude Code анализирует обе стороны конфликта, учитывает намерения каждого автора и интегрирует правки без нарушения функциональности.

### Пошаговый алгоритм разрешения конфликта через Claude

1. **Запустите слияние или ребейз в терминале:**
   ```bash
   git merge origin/main
   # или
   git rebase main
   ```
2. **При обнаружении конфликтов передайте управление Claude Code:**
   ```bash
   I have merge conflicts after rebasing on main. Please inspect each conflicting file, analyze both sides of the changes, and resolve them cleanly.
   ```
3. **Анализ маркеров:** Claude считывает разметку `<<<<<<< HEAD`, `=======` и `>>>>>>>`, сопоставляя контекст изменений.
4. **Проверка компиляции:** после удаления маркеров агент запускает проверку типов (`tsc --noEmit`) или тесты (`npm test`), чтобы гарантировать работоспособность решения.
5. **Стейджинг разрешенных файлов:** агент выполняет `git add <resolved-files>` и подготавливает завершение процесса слияния.

```typescript
// Пример конфликта в файле конфигурации:
<<<<<<< HEAD
export const API_TIMEOUT = 10000; // Увеличенный таймаут для медленных сетей в ветке фичи
=======
export const API_TIMEOUT = 8000; // Обновленный стандарт бэкенда из ветки main
export const RETRY_ATTEMPTS = 3;  // Новое поле, добавленное коллегой в main
>>>>>>> origin/main
```

Claude предложит взвешенное решение: сохранить увеличенный таймаут `10000` из вашей ветки и одновременно перенести новую константу `RETRY_ATTEMPTS = 3` из ветки `main`.

---

## 5. Cherry-pick, Rebase и перенос коммитов

Иногда требуется перенести отдельный патч или критический хотфикс в релизную ветку, не затягивая туда остальную незавершенную историю разработки. Для таких задач применяются механизмы `cherry-pick` и `rebase`.

### Перенос конкретного коммита (Cherry-pick)

```bash
Cherry-pick commit a7b9c1d from branch feature/cart onto release/v1.2.0
```

Если в процессе переноса возникнут расхождения в путях файлов или импортах, Claude адаптирует код и аккуратно устранит несовместимости.

### Интеллектуальный бэкпортинг (Backport)

В проектах с поддержкой нескольких стабильных версий бэкпортинг является частой задачей. Вы можете поручить Claude выполнение всей цепочки действий:

```bash
Backport the security fix from commit 3f8a92 to the legacy-support branch. Verify that existing legacy tests still pass and commit the result.
```

### Rebase против Merge: когда что выбирать

| Операция | Когда применять | Преимущества | Что делает Claude |
| :--- | :--- | :--- | :--- |
| **`git rebase main`** | При обновлении рабочей ветки свежими изменениями из `main` | Линейная, чистая история без лишних merge-коммитов | Проходит коммиты по очереди, автоматически разрешая тривиальные конфликты |
| **`git merge main`** | При интеграции завершенной функциональности в общую ветку | Сохраняет точный хронологический порядок разработки | Создает единый merge-коммит со структурированным описанием изменений |

---

## 6. Управление временными изменениями через Git Stash

Когда необходимо срочно переключиться на критический багфикс или проверить работу чужой ветки, а текущий код еще не готов для коммита, выручает механизм `git stash`.

Claude Code может самостоятельно выполнять многоэтапные цепочки действий со стешем:

```bash
Stash my current changes with a label 'wip-checkout', switch to main, pull latest changes, and report back
```

### Восстановление сохраненного состояния

После завершения срочной задачи вернитесь к отложенным наработкам:

```bash
Switch back to feature/checkout, pop the stash 'wip-checkout', and resolve any conflicts if the base changed
```

> [!TIP]
> Благодаря глубокому пониманию кода Claude проверит, не изменились ли базовые файлы за время паузы, и корректно накатит сохраненный стеш без потерь.

---

## 7. Создание Pull Requests и интеграция с GitHub CLI (gh)

При наличии установленной официальной утилиты GitHub CLI (`gh`) Claude Code превращается в полноценного помощника по созданию и оформлению Pull Request.

### Автоматическое создание PR через Claude

Вместо ручного заполнения полей в браузере введите в терминал:

```bash
Push current branch to origin and create a pull request with gh CLI. Include summary, list of changes, and testing instructions.
```

### Образец сгенерированного Pull Request

Claude формирует аккуратный структурированный markdown-шаблон:

```markdown
## Summary
This PR implements user session invalidation on password reset to prevent
unauthorized access from stolen legacy tokens.

## Changes
- Add `revokeAllUserSessions` service in `src/services/auth.ts`
- Update password reset controller to call invalidation hook
- Add Redis blacklist mechanism for active JWT tokens
- Cover revocation flow with integration tests in `auth.test.ts`

## Testing Instructions
1. Login from two different browsers (simulate active sessions)
2. Trigger "Forgot Password" flow in Browser A
3. Verify that Browser B gets redirected to `/login` on next API call
4. Run test suite: `npm run test:auth`

Fixes #284
```

> [!IMPORTANT]
> Убедитесь, что сессия GitHub CLI активна с помощью команды `gh auth status` перед формированием запросов на слияние.

---

## 8. Встроенные правила безопасности и защитные механизмы

Git — гибкий инструмент, но неосторожное использование разрушительных команд может привести к потере наработок или повреждению истории репозитория. В Claude Code заложены строгие механизмы превентивной защиты.

```mermaid
flowchart LR
    subgraph Опасные_действия["Заблокировано без прямого указания"]
        D1["git push --force в main"]
        D2["git add -A / git add ."]
        D3["git commit --amend (чужие коммиты)"]
        D4["git commit --no-verify"]
    end
    subgraph Безопасный_стандарт["Подход Claude Code"]
        S1["Обычный push или новый коммит"]
        S2["Точечный стейджинг конкретных файлов"]
        S3["Создание нового корректирующего коммита"]
        S4["Исправление ошибок линтера и тестов"]
    end
    D1 -.-> S1
    D2 -.-> S2
    D3 -.-> S3
    D4 -.-> S4
```

### Четыре золотых правила безопасности Claude Code

1. **Запрет деструктивного Force Push:** Claude никогда не выполняет `git push --force` или `-f` в защищенные ветки (`main`, `master`, `release`) без многократного прямого подтверждения.
2. **Точечный стейджинг:** агент избегает слепых команд `git add .` или `git add -A`. Каждый файл индексируется по точному пути, что исключает утечку секретов из `.env`, приватных ключей или дампов баз данных.
3. **Сохранение целостности истории:** агент отдает предпочтение созданию нового коммита вместо перезаписи истории через `git commit --amend`, особенно для уже отправленных на удаленный сервер изменений.
4. **Соблюдение Pre-commit Hooks:** Claude не использует флаг `--no-verify` для обхода проверок Husky, ESLint или Prettier. Если хук блокирует коммит, агент локализует причину ошибки, исправляет код и повторяет процедуру по правилам.

> [!WARNING]
> Никогда не просите искусственный интеллект выполнять непроверенные команды `git reset --hard HEAD~N` в общих ветках. Всегда создавайте временную резервную ветку или используйте `git stash` перед масштабными правками истории.

---

## 9. Практический воркшоп: полный цикл от ветки до PR

Пройдем полный цикл разработки — от получения задачи до открытия проверенного Pull Request с помощью Claude Code.

### Шаг 1. Проверка рабочего дерева и создание ветки

Откройте терминал в репозитории, запустите `claude` и введите:

```bash
Check git status, pull latest changes from main, and create a feature branch called feature/user-avatar
```

Claude убедится в чистоте рабочего каталога, подтянет обновления из `main` и переключится на новую ветку.

### Шаг 2. Реализация функциональности

Поставьте задачу агенту:

```bash
Add an Avatar component in src/components/Avatar.tsx that renders a user image with fallback initials if the image URL is missing.
```

### Шаг 3. Проверка и точечный коммит

После создания файлов скомандуйте зафиксировать результат:

```bash
Review what was created, make sure tests pass, and commit only the avatar component files with a clear conventional commit message
```

Claude запустит тесты, добавит в индекс `src/components/Avatar.tsx` и сопутствующие тесты, сформировав чистый коммит:

```text
feat(ui): add Avatar component with initials fallback

- Render user image with rounded profile styling
- Fallback to calculated two-letter initials on missing src or error
- Add unit test coverage for invalid image source handling
```

### Шаг 4. Отправка изменений и открытие Pull Request

Завершите рабочий цикл финальной инструкцией:

```bash
Push this branch to GitHub and create a draft PR using gh CLI describing the changes
```

---

## 10. Быстрая самопроверка и итоговый чек-лист

Закрепите изученный материал с помощью краткого теста.

### Контрольные вопросы

> **1. Почему Claude Code добавляет файлы по точным путям вместо выполнения `git add .`?**
>
> > [!TIP]
> > **Ответ:** Чтобы исключить случайное попадание в репозиторий конфиденциальных файлов (`.env`), системных файлов (`.DS_Store`) и локальных артефактов сборки, не внесенных в `.gitignore`.

> **2. Как Claude Code выбирает стиль для описания коммитов?**
>
> > [!TIP]
> > **Ответ:** Агент исследует недавние коммиты через `git log`, автоматически адаптируясь под проектные стандарты (Conventional Commits, номера тасков в трекере или лаконичные предложения).

> **3. Что произойдет, если Pre-commit Hook (Husky/ESLint) завершится ошибкой при коммите через Claude?**
>
> > [!TIP]
> > **Ответ:** Claude не станет игнорировать проверку через `--no-verify`. Вместо этого он прочитает лог ошибки, исправит проблемный код и повторит коммит в штатном режиме.

### Итоговый чек-лист эффективной работы с Git

- [ ] Используйте фразу `Commit these changes` вместо ручной цепочки команд `status -> add -> commit`.
- [ ] Совмещайте создание ветки с описанием задачи в одном промпте для сохранения единого контекста.
- [ ] Доверяйте Claude анализ и первичное разрешение конфликтов слияния после `rebase` или `merge`.
- [ ] Применяйте `git stash` через Claude для быстрого переключения на срочные задачи без потери кода.
- [ ] Установите `gh CLI`, чтобы агент мог автоматически формировать структурированные Pull Requests.
- [ ] Не отключайте встроенные правила безопасности: проверяйте итоговый дифф перед отправкой в общий репозиторий.