zshell

Панель Git

Добавляйте изменения в индекс, просматривайте их, создавайте коммиты и отправляйте их рядом с оболочкой, в которой они появились.

Нажмите Cmd+Shift+G. Панель открывает репозиторий, к которому привязан проект. О том, как Zshell выбирает его, см. Каталог проекта.

Каждое действие здесь — команда Git, которую Zshell выполняет от вашего имени. Её вывод показывается, если есть что сообщить помимо «готово». История не переписывается, коммиты не объединяются, принудительная отправка не выполняется без вашего запроса.

Панель инструментов Git

Zshell может показывать компактную панель инструментов под активной вкладкой. В репозитории на ней отображаются текущая ветка и общее число добавленных и удалённых строк; неизменённое дерево отмечается зелёным состоянием Без изменений. Неотслеживаемые файлы учитываются в числе добавленных строк.

  • Нажмите на ветку, чтобы искать локальные ветки и переключаться между ними. В списке отмечена ветка репозитория по умолчанию.
  • Нажмите на счётчики изменений, чтобы открыть панель Git.
  • Вне репозитория в режиме Показывать всегда остаётся кнопка Нет репозитория Git, открывающая панель в состоянии инициализации.

Выберите Скрыть, Авто или Показывать всегда в разделе Настройки → Основные либо задайте toolbar.visibility. По умолчанию панель скрыта. Видимую панель инструментов также можно скрыть через её контекстное меню.

Изменённые файлы

Файлы сгруппированы по конфликтам, изменениям в индексе и изменениям вне индекса. Наведите указатель на строку, чтобы увидеть кнопки, или используйте контекстное меню:

КнопкаДействие
+Добавить файл в индекс
−Убрать его из индекса
↺Отменить изменения в нём

Кнопка Отменить все изменения находится в заголовке панели и сначала запрашивает подтверждение — это единственное действие здесь, которое нельзя отменить другой командой Git.

У конфликтующих файлов вместо обычной кнопки добавления в индекс отображается Пометить как разрешённый (в индекс), чтобы разрешение конфликта было явным действием.

Кнопка с воронкой в заголовке фильтрует список по имени файла — это самый быстрый способ ориентироваться в большом наборе изменений.

Чтение изменений

Нажмите на изменённый файл, чтобы открыть его diff в панели рядом с терминалом, не перекрывая его. В контекстном меню также доступны Открыть файл (сам файл с возможностью редактирования) и Открыть файл сбоку.

Даже большие diff остаются отзывчивыми. Набор изменений из тысячи файлов открывается так же быстро, как однострочный, и прокручивается без рывков.

Элементы управления над diff запоминают два общих для приложения выбора:

  • Единый / Раздельный переключает между одной колонкой и расположением старой и новой версий рядом.
  • Просмотр / Редактирование появляется у файла вне индекса в текущем рабочем дереве. Редактируйте новую версию напрямую и сохраняйте сочетанием Cmd+S; закрытие файла с несохранёнными изменениями обрабатывается так же, как в обычном редакторе.

Diff файлов в индексе и прошлых коммитов остаются доступными только для чтения: это снимки, а не файлы, в которые Zshell может безопасно записывать. Переключение одного diff в режим редактирования или раздельного просмотра обновляет настройку для других открытых diff, не разрешая редактирование там, где оно недоступно.

Создание коммитов

Введите сообщение и нажмите кнопку коммита или выберите действие в её меню:

  • Создать коммит из индекса — включить ровно те изменения, которые добавлены в индекс
  • Добавить всё в индекс и создать коммит — добавить все отслеживаемые изменения, затем создать коммит
  • Дополнить последний коммит — включить изменения из индекса в предыдущий коммит
  • Добавить всё в индекс и дополнить коммит

Ниже показаны недавние коммиты; в их контекстном меню доступны Копировать хеш коммита и Копировать сообщение коммита.

Ветки

Название ветки в заголовке — это меню: выберите другую ветку для переключения или Создать новую ветку…, чтобы начать её от текущего состояния.

Рабочие деревья

Панель Git перечисляет все рабочие деревья репозитория вместе с их ветками и путями рабочих копий. Активная копия отмечена как Текущая. Нажмите на рабочее дерево, чтобы открыть новую вкладку терминала в его каталоге: у каждой рабочей копии будет свой контекст оболочки в рамках того же проекта. Длинные списки рабочих деревьев прокручиваются внутри собственной ограниченной области; заголовок раздела, элементы управления коммитами и список изменённых файлов остаются на месте. Нажмите на заголовок рабочих деревьев, чтобы свернуть или развернуть раздел.

У рабочих деревьев с отсоединённым HEAD вместо имени ветки отображается Отсоединённый HEAD. Голые репозитории также перечислены для полноты, но у них нет рабочего каталога, поэтому открыть их во вкладке терминала нельзя.

Сеансы worktree

В терминале локального репозитория Git выберите Терминал → Новый сеанс в worktree… или нажмите Cmd+Opt+T. Действие также есть в контекстных меню вкладки и кнопки +. Выберите новую или существующую локальную ветку и ещё не существующий каталог. Новые ветки начинаются от ветки репозитория по умолчанию; Текущий HEAD нужно выбрать явно. Существующие ветки сохраняют текущий коммит. Предлагаемый каталог находится рядом с исходной рабочей копией.

Разделённые панели наследуют связь с worktree, которую также восстанавливает сохранённая раскладка. При закрытии связанного сеанса доступны Сохранить worktree, Удалить worktree и Отмена. Удаление возможно только без изменённых, неотслеживаемых или игнорируемых файлов, коммитов вне записанной базы, блокировки и других открытых сеансов, использующих рабочую копию. Ветка Git всегда сохраняется.

Во внешнем терминале можно создавать и закрывать сеансы через zshell +session. Передайте в --project ID из projects; внутри Zshell автоматически используется проект вызывающего терминала. Сеансы создаются в фоне, если не добавить --focus. --base HEAD или --base REF выбирает другую базу, а --worktree NEW_DIR задаёт каталог. При необходимости --connection FILE выбирает запущенный экземпляр. Закрытие сохраняет worktree без явного --remove-worktree; check сообщает, безопасна ли очистка сейчас.

zshell +session projects
zshell +session new --project PROJECT_ID --cwd /path/to/repo --branch feat/task
zshell +session list --project PROJECT_ID
zshell +session check --project PROJECT_ID --session SESSION_ID
zshell +session close --project PROJECT_ID --session SESSION_ID --remove-worktree

Удалённые репозитории

Меню ⋯ содержит действия для работы с удалённым репозиторием:

ДействиеНазначение
Получить (fetch)Обновить ссылки отслеживания удалённых веток
Получить и применить (только fast-forward)Выполнить pull без создания коммита слияния
ОтправитьОтправить текущую ветку
Опубликовать веткуОтправить ветку без upstream, выбрав удалённый репозиторий, если их несколько
Синхронизировать измененияВыполнить pull с fast-forward, затем push
Спрятать все изменения в stashСохранить все изменения в stash, включая неотслеживаемые файлы
Извлечь из stashВосстановить последнюю запись stash

Метки рядом с веткой показывают, на сколько коммитов она ↓ отстаёт от upstream и ↑ опережает его.

В том же меню есть Копировать изменённые пути, Копировать путь репозитория и Показать репозиторий в Finder.

Pull намеренно ограничен режимом fast-forward. Если требуется настоящее слияние или rebase, Git сообщит об этом, а вы примете решение в терминале — панель не выбирает стратегию за вас.

Если репозитория ещё нет

Если в каталоге проекта нет репозитория, панель предлагает Инициализировать репозиторий, выполняя git init в этой папке. До этого она не отвлекает от работы.

Просмотр ходов агентов

Нажмите Просмотреть изменения… на панели Git.

  • Последний ход сравнивает снимки начала и конца выбранного агента, включая все правки за этот период независимо от автора.
  • Незакоммиченные сравнивает HEAD с рабочим деревом, включая подготовленные и неотслеживаемые файлы.
  • Вся ветка сравнивает общего предка с выбранной базовой веткой и рабочее дерево, включая коммиты и незакоммиченные файлы.

Выберите файл и блок. В последнем ходе Сохранить блок отмечает просмотр, а Отменить блок отменяет его в рабочем дереве. Индекс Git не меняется. Исходный снимок и решения остаются видимыми.

Восстановление запрещено, если файл или HEAD изменились, путь небезопасен, агент активен или ходы пересекаются. Двоичные изменения и изменения прав доступны только для просмотра. Файлы больше 5 МиБ недоступны, как и снимки с более чем 2048 изменёнными путями, 25 МиБ данных или превышенным лимитом времени.

Снимки хранятся в текущем сеансе приложения. Нужны достоверные события начала и завершения. У Pi, OpenCode и Grok есть встроенные интеграции. Защищённые запросы фиксируют начало, но всё равно требуют события завершения. Без него завершённый снимок недоступен.