🐛 Частые ошибки

⚡ Кратко: топ-3 ошибки

  • force-push в общую ветку — никогда не включайте main в стек.
  • Правка веток мимо gt — обычный git commit в середине стека ломает синхронизацию; используйте gt modify.
  • Огромные «маленькие» ветки — если каждая ветка на 300 строк, смысл стеков теряется.

1. Force-push в общую ветку

⚠️ Опасно: включить main/master в отправляемый стек. gt submit делает force-push — и вы перепишете общую историю команды.

Правильно: trunk (main) — это основание стека, а не его часть. Graphite пушит только ветки над trunk. Убедитесь, что задали правильный trunk в gt init.

2. Правка веток в обход gt

Если в середине стека сделать обычный git commit или git rebase руками, метаданные Graphite разойдутся с реальным состоянием веток, и стек «поедет».

# ❌ так метаданные стека разойдутся
git switch feat/tasks-service
git commit -am "fix"        # ветки выше НЕ перестроятся автоматически

# ✅ правильно
gt checkout feat/tasks-service
gt modify -a                # amend + авто-restack потомков
Если уже наошибались: gt restack обычно приводит стек в порядок, а gt sync чинит рассинхрон с remote.

3. «Маленькие» ветки, которые на самом деле большие

Стеки нужны, чтобы ревью шло маленькими порциями. Если каждая ветка — это PR на 300+ строк, вы получили все сложности стеков и ни одного их плюса. Дробите по логическим границам: модель / сервис / API / тесты.

4. Забыли gt sync — стек устарел

Пока вы ведёте стек, main уходит вперёд (коллеги вливают свои PR). Без gt sync ваш стек основан на старом main, и при merge возможны лишние конфликты. Привычка: начинать день с gt sync.

5. Паника при конфликте restack

Конфликт во время gt sync/gt restack — не повод сбрасывать всё. Разрешите конфликт как обычно и продолжите:

git add <конфликтные-файлы>
gt continue        # продолжить
# либо полностью откатить операцию:
gt abort
⚠️ Проверить по документации. Поведение команд восстановления (continue/abort/undo) может отличаться между версиями — держите под рукой gt --help.