Branch: Integrate ยท git:20260813.874484b ยท 2026-08-13 ยท sha256 be8cdcd9d8190e2f

Branch: Integrate git:20260813.874484bA

Immutable. This exact content is served forever at /api/v1/blob/be8cdcd9d8190e2f.

---
name: "Git: Integrate Branch"
description: "{{ ๐šซ๐šซ๐šซ }} Integrate a target branch into the current one by merge, rebase or squash"
when_to_use: "When main (or another branch) has moved on and needs folding into the current branch โ€” picks merge/rebase/squash and handles conflicts."
model: sonnet
effort: medium
disable-model-invocation: true
allowed-tools: ["Bash(git:*)", "Bash(~/.claude/library/scripts/git-integrate.sh:*)", "Read", "Glob", "Grep", "Edit"]
arguments: ["strategy", "target"]
argument-hint: "[merge|rebase|squash] [target branch, default main]"
---

# 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

1. Check the current branch name and **confirm with the user** before proceeding.
2. Do NOT create a worktree โ€” work in the current directory.
3. Run `"$HOME"/.claude/library/scripts/git-integrate.sh $strategy $target` (bare `$strategy` when `$target` is empty). Its exit codes:
   - **0** โ€” integration done. For `squash` the 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, resolve preserving **our branch's intent**, then `git commit` (merge) or `git rebase --continue` after each (rebase/squash). Never resolve by discarding our changes wholesale.
4. Run the project's tests to verify the integration.
5. **Only when tests pass**, push: `git push` after a merge; `git push --force-with-lease` after 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.