Часть 1. Ответы на опрос
- trunk — основная ветка (
main/master), от которой растут стеки. Задаётся один раз командойgt init. - В стеке каждая логическая часть — это отдельная ветка и отдельный маленький PR, который ревьюится и вливается независимо. В одной большой ветке всё это — один гигантский дифф в одном PR.
gt create [name] -a -m "msg":-aзастейджит все изменения, ветка создаётся поверх текущей.- После amend
gt modifyавтоматически перестраивает (restack) все ветки выше по стеку на исправленный коммит. - restack — перебазирование цепочки веток на актуальные вершины их родителей. Автоматически — после
gt modify; вручную —gt restack. gt up— к потомку (вверх),gt down— к родителю (вниз); ещёgt top/gt bottom.- Restack переписывает хеши коммитов, поэтому ветку нужно «перезаписать» на remote — это
force-push. Для личных feature-веток стека это безопасно, ведь на них никто не основывается, кроме вашего же стека. gt syncподтягивает свежийmain(уже с влитой нижней веткой), перебазирует оставшийся стек и предлагает удалить локальную ветку влитого PR.
Часть 2. Собрать стек — эталон
gt init # trunk: main
echo "header" > header.txt
gt create feat/header -a -m "feat: add header"
echo "body" > body.txt
gt create feat/body -a -m "feat: add body"
echo "footer" > footer.txt
gt create feat/footer -a -m "feat: add footer"
gt log short
# ◉ feat/footer (current)
# ◯ feat/body
# ◯ feat/header
# ◯ main
Часть 3. Правка нижней ветки — эталон
gt bottom # на feat/header
echo "header v2" > header.txt
gt modify -a # amend + авто-restack
# ✓ Restacked feat/body
# ✓ Restacked feat/footer
Вывод со строками Restacked … подтверждает, что верхние ветки перестроены на исправленную нижнюю.
Часть 4. На подумать
- В чистом Git — 3 ручных
git rebase(каждую из трёх веток выше нужно перебазировать по очереди). В Graphite — одинgt modify -a(илиgt restack). - В стек включаются ветки, которые
gt submitforce-push'ит.main— общая ветка команды; force-push в неё перепишет общую историю и сломает работу всем. Поэтому trunk никогда не входит в отправляемый набор.
⚠️ Проверить по документации. Вывод команд приведён схематично. На вашей версии формат может отличаться — ориентируйтесь на смысл, сверяйтесь с
gt --help.