git-surgeon CLI

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

  • 192 ★ репозитория
  • Последний коммит
CLI

Широкий доступ

Почему такой уровень

  • Команды `discard`, `fold`, `split`, `squash` и `move` меняют рабочее дерево и историю git без возможности простого отката.
  • Утилита ставится скриптом из сети.
Все причины и проверки

raine/git-surgeon

Установка

Работает в

Ручная установка

curl -fsSL https://raw.githubusercontent.com/raine/git-surgeon/main/scripts/install.sh | bash

Первый вариант из раздела Quick start. Альтернативы: `cargo install git-surgeon` и Homebrew. Затем `git-surgeon install-skill --claude`.

Доступ и проверки

Как мы проверяем

Широкий доступИнструмент может менять данные, выполнять команды или работать с секретами.

  • Команды `discard`, `fold`, `split`, `squash` и `move` меняют рабочее дерево и историю git без возможности простого отката.
  • Утилита ставится скриптом из сети.

Это чужой код. Посмотрите файлы в репозитории перед установкой.

Что делает

git-surgeon решает проблему агентов, которые не умеют `git add -p`. Команда `git-surgeon hunks` выводит блоки изменений с короткими идентификаторами, а `stage`, `unstage`, `discard` и `commit` работают с ними по ID. Можно закоммитить выбранные блоки одним шагом или отдельные строки внутри блока. Для перестройки истории есть `split`, `fold`, `amend`, `squash`, `reword`, `move` и `undo`: смешанный коммит делится на сфокусированные, исправление встраивается в более ранний коммит, а блоки отменяются из прошлых коммитов. Команда `commit-to` кладет блоки в другую ветку без переключения на нее. Скилл учит агента вызывать утилиту вместо разрушительных обходов с `git checkout`.

Для кого. Разработчикам, которые просят Claude Code, Codex или OpenCode делать аккуратные раздельные коммиты, а не терять правки при сбросе файлов.

Подходит, если

  • Диф смешал рефакторинг и новую функцию, и их нужно развести по двум коммитам.
  • Исправление опечатки из ревью надо вплавить в коммит недельной давности.
  • Закоммиченный блок оказался лишним и откатывается точечно.
  • Правку нужно положить в соседнюю ветку без переключения на нее.
  • Агент тратит ходы на хитрые обходы `git add -p`.

Не подходит, если

  • Репозиторий работает на Jujutsu: автор отсылает к jj-hunk-tool.
  • Историю уже отправили в общую ветку, и ее переписывание сломает коллег.
  • Хватает коммита целого файла: обычный `git commit` проще.

Пример запроса к агенту

Раздели мои изменения на два коммита: рефакторинг отдельно, новая функция отдельно.

Ограничения

Утилита работает над git-репозиторием и переписывает историю командами `fold`, `split`, `squash`, `move`, поэтому запускать их стоит на локальных ветках, еще не отправленных коллегам. Идентификаторы блоков меняются вместе с диффом, и агент заново вызывает `hunks` после каждой правки. Скилл ставится отдельной командой `install-skill` для Claude Code, OpenCode или Codex. Для Jujutsu утилита не подходит. Установка из shell-скрипта по `curl | bash` требует доверия к источнику, есть варианты через Cargo и Homebrew.

Как отключить. Удалите бинарный файл (`cargo uninstall git-surgeon` или `brew uninstall git-surgeon`) и папку скилла `git-surgeon` из каталога скиллов агента. Для плагина Claude Code выполните `claude plugin uninstall git-surgeon@git-surgeon`.

Частые вопросы

Как поставить git-surgeon?

Выполните `cargo install git-surgeon` или `brew install raine/git-surgeon/git-surgeon`. Затем `git-surgeon install-skill --claude` ставит скилл для Claude Code, а флаги `--opencode` и `--codex` для других агентов.

Чем он лучше git add -p?

Он не требует интерактива. Агент видит блоки с идентификаторами и коммитит их командой `git-surgeon commit` без диалога, который ему недоступен.

Можно ли коммитить отдельные строки?

Да, внутри блока можно выбрать диапазон строк. В README есть пример разделения одного блока на несколько коммитов.

Как поставить плагином в Claude Code?

Выполните `claude plugin marketplace add raine/git-surgeon`, затем `claude plugin install git-surgeon@git-surgeon`.

Работает ли с Jujutsu?

Нет. Для Jujutsu автор рекомендует отдельный проект jj-hunk-tool.

Обсуждение

Вопросов и отзывов пока нет.

Скилл раскладывает правки на логичные коммиты по Conventional Commits и безопасно ведет ветки, отправку и pull request.

СкиллРасширенный доступ105Звезды репозитория

gitai — открытый сервер контроля версий для сотен агентов: слияние через compare-and-swap, серверная история и CLI graft.

CLIРасширенный доступ1 тыс.Звезды репозитория

multi-gitter запускает один сценарий в нескольких Git-репозиториях и создает запрос на слияние для полученных изменений.

CLIРасширенный доступ1,3 тыс.Звезды репозитория

Локальный шлюз перед git push: ревью, тесты, документация и линтер проходят в отдельной копии, и только после этого ветка уходит в удаленный репозиторий

CLIШирокий доступ9,2 тыс.Звезды репозитория

Три UNIX-утилиты: форк каталога без копирования, запуск агента в песочнице и патч с его правками.

CLIРасширенный доступ64Звезды репозитория

Навык и плагин для Git и GitHub: ветки, Conventional Commits и путь запроса на слияние до зеленого мержа.

СкиллРасширенный доступ59Звезды репозитория

Коротко о README

README показывает типичный провал агента, который сбрасывает файл ради раздельных коммитов, и сравнивает его с работой через git-surgeon. Таблица подсказывает, когда брать `amend`, а когда `fold`.

Бейдж для README

Исходный SKILL.md

---
name: git-surgeon
description: Non-interactive hunk-level git staging, unstaging, discarding, undoing, fold, amend, squash, commit splitting, and commit reordering. Use when selectively staging, unstaging, discarding, reverting, squashing, splitting, or reordering individual diff hunks by ID instead of interactively.
---

# git-surgeon

CLI for hunk-level git operations without interactive prompts. Useful for AI
agents that need precise control over which changes to stage, unstage, discard,
or undo.

## Commands

```bash
# List unstaged hunks (shows ID, file, +/- counts, preview)
git-surgeon hunks

# List staged hunks
git-surgeon hunks --staged

# Filter to one file
git-surgeon hunks --file=src/main.rs

# List hunks from a specific commit
git-surgeon hunks --commit <HEAD/sha>

# Show all hunks with line numbers (for small commits needing line-range splits)
git-surgeon hunks --commit <sha> --full

# Show blame info (which commit introduced each line)
git-surgeon hunks --blame
git-surgeon hunks --blame --staged
git-surgeon hunks --blame --commit <sha>

# Show full diff for a hunk (lines are numbered for use with --lines)
git-surgeon show <id>
git-surgeon show <id> --commit HEAD

# Stage specific hunks
git-surgeon stage <id1> <id2> ...

Сообщить о проблеме