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.