Files
compound-engineering-plugin…/plugins/compound-engineering/skills/ce-commit-push-pr/references/branch-creation.md

1.9 KiB

Branch creation from default branch

Local <base> may have stale commits (another session/worktree advanced it) or commits the user authored intending to branch from later. Local git can't distinguish these — ask when unpushed commits are present.

Decision flow

1. Fetch fresh remote base

git fetch --no-tags origin <base>

If fetch fails (network, auth, no remote), use the fallback at the bottom.

2. Check for unpushed local commits on <base>

git log origin/<base>..HEAD --oneline
  • Empty output: set BASE_REF=origin/<base> and proceed to step 3.

  • Non-empty output: show the commit list and ask (per the "Asking the user" convention in SKILL.md):

    "Local <base> has N unpushed commits not on origin/<base>. Carry them onto the new feature branch, or leave them on local <base>?"

    • Carry forwardBASE_REF=HEAD. The new branch starts from local HEAD, preserving the commits.
    • Leave on <base>BASE_REF=origin/<base>. The new branch starts clean; commits remain on local <base>.

    Never default silently — carrying foreign commits into a PR is worse than asking again.

3. Create the feature branch

git checkout -b <branch-name> "$BASE_REF"

If checkout fails because uncommitted changes would be overwritten, stash and retry:

git stash push -u -m "ce-commit-push-pr: pre-branch <branch-name>"
git checkout -b <branch-name> "$BASE_REF"
git stash pop

If git stash pop reports conflicts, surface the conflict output and the stash ref to the user — do not auto-resolve.

Fetch failure fallback

If git fetch fails, branch from current local HEAD:

git checkout -b <branch-name>

Note in the user-facing summary that base freshness was not verified. Skip the unpushed-commits check — without a fresh origin/<base>, the answer is unreliable.