git section of .planning/config.json.
Configuration reference
/gsd-config --advanced (Git Customization section) or by editing config.json directly.
Branching strategies
- none (default)
- phase
- milestone
All work happens on your current branch. GSD makes no branch decisions — it commits directly to whatever branch you are on when you invoke
/gsd-execute-phase. This is the right choice for solo development, simple projects, or when you manage branching yourself.Strategy comparison
| Strategy | Branch created | Scope | Merge point | Best for |
|---|---|---|---|---|
none | Never | Current branch | N/A | Solo development, simple projects |
phase | At execute-phase start | One phase | User merges after each phase | Code review per phase, granular rollback |
milestone | At first execute-phase in the milestone | All phases in the milestone | At complete-milestone | Release branches, PR per version |
Template variables
Customize the branch name format by editing the template strings inconfig.json.
| Variable | Available in | Example output |
|---|---|---|
{phase} | phase_branch_template | 03 (zero-padded) |
{slug} | Both templates | user-authentication (lowercase, hyphenated from phase name) |
{milestone} | milestone_branch_template | v1.0 |
Custom template examples
Custom template examples
Use any combination of variables and literal text:With the above template, phase 2 named “API layer” produces: This produces:
feature/gsd-02-api-layerFor milestone strategy with a custom format:release/v1.0Base branch
Setgit.base_branch to the integration branch that phase and milestone branches are created from and eventually merged back into. Override this when your repository uses master, develop, or a named release branch rather than main.
GSD also reads
git.base_branch to determine where to target the pull request created by /gsd-ship. Make sure this matches the default branch in your GitHub repository settings.Milestone completion merge options
When using themilestone strategy, /gsd-complete-milestone offers you a choice of how to merge the milestone branch back into base_branch:
| Option | Git command | Result |
|---|---|---|
| Squash merge (recommended) | git merge --squash | Single clean commit representing the entire milestone |
| Merge with history | git merge --no-ff | Preserves all individual phase commits |
| Delete without merging | git branch -D | Discards the branch; useful if you shipped via individual phase PRs |
| Keep branches | (none) | Leaves branches in place for manual handling |
Tags on milestone completion
By default, GSD creates a git tag (v[X.Y]) when a milestone completes. Disable this if you have your own release tagging workflow:
/gsd-quick branch template
Optionally configure an automatic branching strategy for/gsd-quick ad-hoc tasks:
/gsd-quick creates a branch named with the task ID and a slug derived from the task description before running. When null (the default), /gsd-quick works on your current branch.
