Merge

Under git.branch_strategy: milestone (the generated default), each milestone works on its own dedicated branch for its full lifecycle. Once a milestone is completed:

pitway milestone-merge M001                   # merges into base_branch
pitway milestone-merge M001 --target release  # or an explicit target

--target defaults to the milestone's own base_branch. Re-running milestone-merge is a safe, idempotent no-op once the merge has already landed.

Not automatic

milestone-complete does not run this for you -- merging is invoked explicitly, when you're actually ready to integrate the branch. This keeps "the milestone's work is verified and done" and "the milestone's branch is now part of your mainline" as two separate, deliberate decisions.

The other branch strategy

Setting git.branch_strategy: main instead commits milestones directly to the current branch, skipping the dedicated-branch-and-merge step entirely -- there's nothing for milestone-merge to do under that strategy.