--- title: "Git strategy" description: "Isolation modes, branching model, and merge behavior for milestone work." --- SF uses git for milestone isolation and sequential commits. You choose an **isolation mode** that controls where work happens. The strategy is fully automated — no manual branch management needed. ## Isolation modes Configure via the `git.isolation` preference: | Mode | Working directory | Branch | Best for | |------|-------------------|--------|----------| | `none` (default) | Project root | Current branch | Most projects — no isolation overhead | | `worktree` | `.sf/worktrees//` | `milestone/` | Full file isolation | | `branch` | Project root | `milestone/` | Submodule-heavy repos | ### `none` mode (default) Work happens directly on your current branch. No worktree, no milestone branch. SF still commits sequentially with conventional commit messages, but there's no branch isolation. This is the simplest mode and works well for most projects. ### `worktree` mode Each milestone gets its own git worktree on a `milestone/` branch. All execution happens inside the worktree. On completion, the worktree is squash-merged to main as one clean commit. The worktree and branch are cleaned up. ### `branch` mode Work happens in the project root on a `milestone/` branch. No worktree is created. On completion, the branch is merged to main. **Changed in v2.45.0:** The default isolation mode changed from `worktree` to `none`. If your workflow relies on worktree isolation, set `git.isolation: worktree` explicitly in your preferences. ## Branching model ``` main ───────────────────────────────────────────────────────── │ ↑ └── milestone/M001 (worktree) ────────────────────────┘ commit: feat: core types commit: feat: markdown parser commit: feat: file writer → squash-merged to main as single commit ``` ### Parallel worktrees With [parallel orchestration](/guides/parallel-orchestration) enabled, multiple milestones run in separate worktrees simultaneously: ``` main ────────────────────────────────────────────────────────── │ ↑ ↑ ├── milestone/M002 (worktree) ─────────┘ │ │ → squash-merged first │ │ │ └── milestone/M003 (worktree) ────────────────────────┘ → squash-merged second ``` Merges happen sequentially to avoid conflicts. ### Commit format Conventional commit format with SF metadata in trailers: ``` feat: core type definitions SF-Task: M001/S01/T01 feat: markdown parser for plan files SF-Task: M001/S01/T02 ``` ## Workflow modes Set `mode` to get sensible defaults: ```yaml mode: solo # personal projects mode: team # shared repos ``` | Setting | `solo` | `team` | |---|---|---| | `git.auto_push` | `true` | `false` | | `git.push_branches` | `false` | `true` | | `git.pre_merge_check` | `false` | `true` | | `git.merge_strategy` | `"squash"` | `"squash"` | | `unique_milestone_ids` | `false` | `true` | Mode defaults are the lowest priority — any explicit preference overrides them. ## Git preferences ```yaml git: auto_push: false push_branches: false remote: origin snapshots: false pre_merge_check: false commit_type: feat main_branch: main merge_strategy: squash # "squash" or "merge" isolation: none # "none" (default), "worktree", or "branch" commit_docs: true auto_pr: false pr_target_branch: develop ``` ### Automatic pull requests For teams using Gitflow or branch-based workflows: ```yaml git: auto_push: true auto_pr: true pr_target_branch: develop ``` Pushes the milestone branch and creates a PR targeting your specified branch. Requires `gh` CLI installed and authenticated. ### `commit_docs: false` Adds `.sf/` to `.gitignore` and keeps all planning artifacts local-only. Useful for teams where only some members use SF. ## Worktree management ### Automatic (auto mode) 1. Milestone starts → worktree created at `.sf/worktrees//` 2. Planning artifacts copied into the worktree 3. All execution happens inside the worktree 4. Milestone completes → squash-merged to main 5. Worktree and branch cleaned up ### Manual ``` /worktree create /worktree switch /worktree merge /worktree remove ``` ## Self-healing SF includes automatic recovery for common git issues: - **Detached HEAD** — automatically reattaches to the correct branch - **Stale lock files** — removes `index.lock` files from crashed processes - **Orphaned worktrees** — detects and offers cleanup Run `/sf doctor` to check git health manually.