gitbutler-stacks
Original:🇺🇸 English
Translated
This skill should be used when creating stacks, dependent branches, or when "stack", "stacked branches", "anchor", "--anchor", "but branch new -a", "create dependent branch", or "break feature into PRs" are mentioned with GitButler. Covers anchor-based stacking for dependent features and reviewable PR breakdown.
1installs
Sourceoutfitter-dev/agents
Added on
NPX Install
npx skill4agent add outfitter-dev/agents gitbutler-stacksTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →GitButler Stacks
Dependent branches → anchor-based stacking → reviewable chunks.
<when_to_use>
- Sequential dependencies (e.g., refactor → API → frontend)
- Large features broken into reviewable chunks
- Granular code review (approve/merge early phases independently)
- Post-hoc stack organization after exploratory coding
NOT for: independent parallel features (use virtual branches), projects using Graphite stacking
</when_to_use>
Stacked vs Virtual Branches
| Type | Use Case | Dependencies |
|---|---|---|
| Virtual | Independent, unrelated work | None — parallel |
| Stacked | Sequential dependencies | Each builds on parent |
Stacked branches = virtual branches split into dependent sequence.
Default: Virtual branches are stacks of one.
Creating Stacks
bash
# Base branch (no anchor)
but branch new base-feature
# Stacked branch (--anchor specifies parent)
but branch new child-feature --anchor base-feature
# Third level
but branch new grandchild-feature --anchor child-featureResult: ← ←
base-featurechild-featuregrandchild-featureShort form: instead of
-a--anchorbash
but branch new child -a parentStack Patterns
Common patterns: feature dependency chains, refactoring sequences, deep stacks.
Example - Feature Dependency:
bash
but branch new auth-core
but branch new auth-oauth --anchor auth-core
but branch new auth-social --anchor auth-oauthSee for detailed patterns with commit examples.
references/patterns.mdPost-Hoc Stack Organization
Convert independent branches into a stack by recreating with correct anchors:
- Create new branch with pointing to intended parent
--anchor - Move commits with
but rub <sha> <new-branch> - Delete original branch
See for detailed workflows.
references/reorganization.mdPublishing Stacks
Using CLI (Preferred)
bash
# Push and create PR for a branch
but push dependent-feature
but pr new dependent-feature
# Push all unpushed branches
but pushbut pushbut pr new- Pushing branches to remote
- Creating PRs with correct base branches
- Updating existing PRs if already created
Using GitHub CLI (Alternative)
bash
# Push branches
git push -u origin base-feature
git push -u origin dependent-feature
# Create PRs with correct base branches
gh pr create --base main --head base-feature \
--title "feat: base feature" \
--body "First in stack"
gh pr create --base base-feature --head dependent-feature \
--title "feat: dependent feature" \
--body "Depends on base-feature PR"GitHub Settings
- Enable automatic branch deletion after merge
- Use Merge strategy (recommended) — no force pushes needed
- Merge bottom-to-top (sequential order)
Conflict Handling in Stacks
GitButler resolves conflicts per-commit during rebase:
- When base branch updates, dependent commits rebase automatically
- Conflicted commits marked but don't block other commits
- Resolve conflicts per affected commit
- Partial resolution can be saved and continued later
bash
# Update base (may trigger rebases in stack)
but pull
# Check which commits have conflicts
but status
# Resolve in editor, GitButler auto-detects resolutionUnlike git rebase: Remaining commits continue rebasing even if some conflict.
Stack Reorganization
Key operations for restructuring stacks:
| Operation | Command |
|---|---|
| Squash commits | |
| Move commit | |
| Split branch | Create anchored branch, move commits |
See for detailed examples.
references/reorganization.mdStack Navigation
Note: Virtual branches don't need checkout — all branches active simultaneously.
bash
# View full stack structure
but status
# Work on any branch directly (no checkout needed)
but commit base-feature -m "update base"
but commit dependent-feature -m "update dependent"
# Inspect a specific branch
but show dependent-feature
# JSON for programmatic analysis
but show dependent-feature --json | jq '.commits[] | .id'ALWAYS:
- Create stacks with from the start
--anchor - Merge stacks bottom-to-top (base first, dependents after)
- Snapshot before reorganizing:
but oplog snapshot --message "Before stack reorganization" - Keep each level small (100-250 LOC) for reviewability
- Delete empty branches after reorganization
NEVER:
- Skip stack levels when merging
- Stack independent, unrelated features (use virtual branches)
- Create deep stacks (5+ levels) without good reason
- Forget anchor when creating dependent branches
Troubleshooting
| Symptom | Cause | Solution |
|---|---|---|
Stack not showing in | Missing | Recreate with correct anchor |
| Commits in wrong stack level | Wrong branch targeted | |
| Can't merge middle of stack | Wrong order | Merge bottom-to-top only |
Recovery
To fix a branch with wrong/missing anchor: create new branch with correct anchor, move commits with , delete original.
but rubSee for complete recovery procedures.
references/reorganization.mdBest Practices
Planning
- Start simple: 2-3 levels max initially
- Single responsibility per level
- Only stack when there's a real dependency
Maintenance
- Run regularly to verify structure
but status - Commit to correct branches immediately
- Clean up empty branches
Communication
- Clear commit messages explaining why stack level exists
- Descriptive names indicating stack relationship
- Share when coordinating
but status
Reference Files
- — Detailed stack patterns (feature dependency, refactoring, deep stacks)
references/patterns.md - — Post-hoc organization, squashing, moving commits, splitting
references/reorganization.md
Related Skills
- gitbutler-virtual-branches — Core GitButler workflows
- gitbutler-complete-branch — Merging to main
- gitbutler-multi-agent — Multi-agent coordination