Graphite (gt) Skill
This skill provides instructions for navigating branches and restacking stacks using Graphite (gt).
Core Principles Strictly Prohibited: NEVER run gt ss, gt submit, or gt squash. These commands are forbidden. Navigation: Use gt commands to move between branches in a stack. Maintenance: Use gt restack for local stack maintenance and gt get or gt sync for syncing from remote. Branch Navigation
Use these commands to navigate through a stack of branches:
Command Action gt up Move to the branch immediately above the current one in the stack. gt down Move to the parent of the current branch. gt prev Move to the previous branch in the stack, as ordered by gt log. gt next Move to the next branch in the stack, as ordered by gt log. gt top Move to the tip branch of the current stack. gt bottom Move to the branch closest to trunk in the current stack. gt ls Display all tracked branches and their dependency relationships in a short format. Stack Management
Maintain your stack with these commands:
Command Action gt restack Ensure each branch in the current stack has its parent in its Git commit history, rebasing if necessary. This maintains the local stack and does NOT reach out to upstream. gt get Sync a specific branch or stack from remote (trunk to branch). If no branch is provided, it syncs the current stack. gt sync Sync all branches (including trunk) from remote and prompt to delete merged branches. Branch Management
Use these commands to manage branches within your stack.
Command Action
gt create
Use gt modify to manage commits within your stack. It automatically restacks descendants.
Command Action gt modify --amend Amend the head commit of the current branch. gt modify -c Create a new commit on the current branch. Preferred for adding new changes while keeping history clean. Dealing with Interactivity
Many Graphite commands (gt modify, gt move, gt split, gt restack) are interactive by default, opening selectors, editors, or specialized menus.
For the Agent: Avoid using these commands in an interactive way. If a command requires user input that cannot be provided via flags (e.g., resolving complex rebase conflicts), stop and notify the user.
Rebase Conflicts: If gt restack or gt move hits a conflict, Graphite will pause. Follow these steps to resolve:
Locate Conflicts: Use git status or look at the error output to identify files with merge conflicts.
Edit Files: Open the conflicting files and resolve the merge markers (<<<<<<<, =======, >>>>>>>). Ensure the code is functionally correct and includes necessary changes from both sides.
Stage Changes: Run gt add -A (or git add
The Problem: Using standard git commit or git commit --amend fails to update Graphite's internal stack metadata and does not trigger automatic restacking of descendants. This can lead to a desynchronized stack where Graphite is unaware of the new commits or changes.
The Solution: Always prefer gt commands over their standard git counterparts for commit and branch management.
Creating a new branch: Use gt create
Benefits:
Metadata Integrity: Graphite keeps its internal view of the stack consistent. Automatic Restacking: Descendant branches are automatically updated if you change a parent branch. Visual Clarity: Graphite's CLI output stays accurate and helpful. Misplaced Commits
If you accidentally commit a change to the wrong branch in a stack:
Stash uncommitted changes: If you have uncommitted work, git stash to keep it safe.
Move the change to a new branch (if the commit belongs in its own new branch):
gt create
[!CAUTION] DO NOT use the following commands under any circumstances:
gt ss gt submit gt squash
These commands are strictly forbidden to ensure that PR submission, updates, and branch squashing are handled manually or through specified workflows.