Back to Next Js

Git Workflow with Graphite

.cursor/commands/gt-workflow.md

16.2.53.7 KB
Original Source

Git Workflow with Graphite

Overview

Use Graphite (gt) instead of git for ALL branch and commit operations in this repository.

Use gt Instead of git

All git commands work with gt. Always use gt instead of git:

bash
gt add <files>       # instead of git add
gt commit            # instead of git commit
gt status            # instead of git status
gt diff              # instead of git diff
# etc.

For branch/push operations, use the Graphite-specific commands:

  • gt create <branch-name> -m "message" instead of git branch + git commit
  • gt submit --no-edit instead of git push

Graphite Commands

CommandDescription
gt add <files>Stage files for commit
gt create <branch-name> -m "message"Create a new branch with commit
gt modify -a --no-editStage all and amend current branch's commit
gt checkout <branch>Switch branches
gt syncSync and restack all branches
gt submit --no-editPush and create/update PRs
gt log shortView stack status

Creating a New Branch with Changes

CRITICAL: Always stage changes BEFORE running gt create. The command format is:

bash
gt add <files>                               # Stage changes FIRST
gt create <branch-name> -m "commit message"  # Then create branch with commit

If you run gt create without staged changes, it creates an empty branch with no commit. Then gt modify -a --no-edit will fail because there's no commit to amend.

If you accidentally created an empty branch:

bash
gt add <files>
gt commit -m "commit message"    # Create initial commit
gt submit --no-edit              # Then submit

Creating PRs with Descriptions

All PRs require a description. Use this workflow:

bash
gt submit --no-edit
gh pr edit <pr-number> --body "Place description here"

Safety Rules

  • Graphite force-pushes everything - old commits only recoverable via reflog
  • Never have uncommitted changes when switching branches - they get lost during restack
  • Never use gt stash with Graphite - causes conflicts when gt modify restacks
  • Never use gt checkout HEAD -- <file> after editing - silently restores unfixed version
  • gt modify --no-edit with unstaged/untracked files stages ALL changes
  • gt sync pulls FROM remote, doesn't push TO remote
  • gt modify restacks children locally but doesn't push them
  • Always verify with gt status -sb after stack operations

Safe Multi-Branch Fix Workflow

bash
gt checkout parent-branch
# make edits
gt modify -a --no-edit        # Stage all, amend, restack children
gt show HEAD -- <files>       # VERIFY fix is in commit
gt submit --no-edit           # Push immediately

gt checkout child-branch      # Already restacked from gt modify
# make edits
gt modify -a --no-edit
gt show HEAD -- <files>       # VERIFY
gt submit --no-edit

Checklist for Creating a PR

  1. Stage changes: gt add <files>
  2. Create branch with commit: gt create <branch-name> -m "message"
  3. Push and create PR: gt submit --no-edit
  4. Add PR description using .github/pull_request_template.md format: gh pr edit <pr-number> --body "..."

General Safety Checklist

  • Always use gt instead of git
  • No uncommitted changes before switching branches
  • Verify with gt status -sb after stack operations