# ExitWorktree

Завершает сеанс worktree, ранее созданный с помощью `EnterWorktree`, и возвращает сеанс в исходный рабочий каталог. Этот инструмент действует исключительно на worktree, созданные `EnterWorktree` в текущем сеансе; если такой сеанс не активен, вызов не производит никакого эффекта.

## Когда использовать

- Работа в изолированном worktree завершена и требуется вернуться в основной рабочий каталог.
- Задача в worktree ветки функциональности выполнена и после слияния необходимо удалить ветку и каталог.
- Требуется сохранить worktree для последующего использования и просто вернуться в исходный каталог, не удаляя ничего.
- Требуется отказаться от экспериментальной или временной ветки, не оставляя на диске никаких артефактов.
- Перед запуском нового сеанса `EnterWorktree` необходимо сначала завершить текущий.

## Параметры

- `action` (строка, обязательный): `"keep"` сохраняет каталог worktree и ветку на диске, чтобы можно было вернуться к ним позже; `"remove"` удаляет и каталог, и ветку, выполняя чистое завершение.
- `discard_changes` (логическое значение, необязательный, по умолчанию `false`): Имеет значение только при `action: "remove"`. Если worktree содержит незафиксированные файлы или коммиты, отсутствующие в исходной ветке, инструмент откажет в удалении, если `discard_changes` не установлен в `true`. В ответе об ошибке перечислены конкретные изменения, чтобы вы могли подтвердить их с пользователем перед повторным вызовом.

## Примеры

### Пример 1: чистое завершение после слияния изменений

После завершения работы в worktree и слияния ветки в main вызовите `ExitWorktree` с `action: "remove"`, чтобы удалить каталог worktree и ветку и вернуться в исходный рабочий каталог.

```
ExitWorktree(action: "remove")
```

### Пример 2: отказ от временного worktree с незафиксированным экспериментальным кодом

Если worktree содержит экспериментальные незафиксированные изменения, которые необходимо полностью отбросить, сначала попробуйте `action: "remove"`. Инструмент откажет и перечислит незафиксированные изменения. После подтверждения пользователем того, что изменения можно отбросить, повторно вызовите с `discard_changes: true`.

```
ExitWorktree(action: "remove", discard_changes: true)
```

## Примечания

- Этот инструмент действует исключительно на worktree, созданные `EnterWorktree` в текущем сеансе. Он не затронет worktree, созданные с помощью `git worktree add`, worktree из предыдущих сеансов или обычный рабочий каталог, если `EnterWorktree` никогда не вызывался — в этих случаях вызов не производит эффекта.
- `action: "remove"` будет отклонён, если worktree содержит незафиксированные изменения или коммиты, отсутствующие в исходной ветке, если только `discard_changes: true` не задан явно. Всегда подтверждайте с пользователем перед установкой `discard_changes: true`, поскольку данные не подлежат восстановлению.
- Если к worktree был присоединён сеанс tmux: при `remove` он завершается; при `keep` продолжает работу, а его имя возвращается, чтобы пользователь мог переподключиться позже.
- После завершения `ExitWorktree` можно снова вызвать `EnterWorktree` для запуска нового сеанса worktree.
