Integrate $target into the current branch
Replaces the former git-branch-merge / git-branch-rebase / git-branch-squash trio. The mechanical flow (fetch, integrate, state checks) lives in the script; you handle conflicts, the squash commit message, tests and the push.
$strategy is required (merge, rebase or squash); $target defaults to main when empty.
Steps
- Check the current branch name and confirm with the user before proceeding.
- Do NOT create a worktree; work in the current directory.
- Run
"$HOME"/.claude/library/scripts/git-integrate.sh $strategy $target(bare$strategywhen$targetis empty). Its exit codes:- 0: integration done. For
squashthe branch's changes are staged as one unit: write a single descriptive commit message (conventional commits) and commit. - 2: state error (dirty tree, detached HEAD, wrong branch, fetch failure). Report the script's message and stop; fix only what the user asks you to fix.
- 3: conflicts, left in place. List them, then resolve with judgement about whose change is right: our branch's intent wins for the work this branch is about; the incoming side (usually main) wins elsewhere, since its conflicting change typically carries a fix this branch predates. Never resolve by discarding our changes wholesale, and never by discarding main's either. Then
git commit(merge) orgit rebase --continueafter each (rebase/squash).
- 0: integration done. For
- Run the project's tests to verify the integration.
- Only when tests pass, push:
git pushafter a merge;git push --force-with-leaseafter a rebase or squash. Never plain--force.
Red flags
Never: push with failing tests; force-push without --with-lease; run the script on a dirty tree ("stash it yourself" is the user's call, not yours).
Always: confirm the branch first; keep conflict resolutions minimal and intent-preserving.