Installs into .claude/skills of the current project.
Are you the author of Git Merge Branch?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/zhaoyis-git-merge-branch)
---
name: git-merge-branch
description: Merge current branch to a target branch. Use when the user wants to merge their current branch to another branch (e.g., qa, master, develop).
license: MIT
compatibility: Requires git CLI and a git repository.
metadata:
author: zhaoyi
version: "1.2"
generatedBy: "1.0.0"
---
Merge current branch to a target branch.
**Input**: The skill will prompt for the target branch name before executing.
**Steps**
1. **Pre-merge checks**
Run `git status` to check for:
- Uncommitted changes (staged or unstaged)
- Untracked files
**If there are uncommitted changes:**
- Warn user and ask how to proceed:
- Stash changes and continue
- Commit changes first
- Cancel merge
Run `git branch --show-current` to get the current branch name.
Run `git log origin/<current-branch>..HEAD --oneline` to check if local is ahead of remote.
**If current branch not pushed to remote:**
- Warn user: "Current branch has unpushed commits"
- Ask if they want to push first or proceed anyway
2. **Get available branches**
Run `git branch -a` to list all available branches (local and remote).
Show current branch and uncommitted changes status.
3. **Prompt for target branch**
Use **AskUserQuestion tool** to ask the user which branch they want to merge into.
Show:
- Current branch name
- List of common target branches (filtered from local branches)
- Allow custom input for other branch names
Example prompt:
```
当前分支: feature/xxx
未提交变更: 0 个文件
请选择目标合并分支:
- master
- qa
- stg
- 其他 (手动输入)
```
4. **Prompt for merge strategy**
Use **AskUserQuestion tool** to ask for merge strategy:
**Merge strategies:**
- **Default merge**: `git merge <branch>` - Standard merge with merge commit
- **Squash merge**: `git merge --squash <branch>` - Squash all commits into one
- **No-ff merge**: `git merge --no-ff <branch>` - Always create merge commit
Default: Standard merge
5. **Fetch and update target branch**
Before merging, ensure target branch is up to date:
```bash
git fetch origin <target-branch>
git checkout <target-branch>
git pull origin <target-branch>
```
6. **Perform merge**
Execute merge with selected strategy:
```bash
git merge <source-branch> -m "Merge branch '<source-branch>' into <target-branch>"
```
Or with squash:
```bash
git merge --squash <source-branch>
git commit -m "Merge branch '<source-branch>' into <target-branch> (squashed)"
```
**If merge conflicts occur:**
- Show conflict files: `git diff --name-only --diff-filter=U`
- Show conflict summary
- Ask user how to resolve:
1. Abort merge
2. Manual resolve (wait for user to resolve)
3. Use theirs/ours for specific files
**If abort:**
```bash
git merge --abort
```
Exit and inform user.
7. **Push to remote**
After successful merge:
```bash
git push origin <target-branch>
```
8. **Switch back to source branch**
**IMPORTANT**: Always switch back to the source branch after merge by default.
Return to the original branch:
```bash
git checkout <source-branch>
```
9. **Post-merge options (optional)**
After switching back, ask user if they want to delete the source branch:
**Options (multi-select):**
- **Keep branch (default)**: No action needed, continue development on source branch
- **Delete local branch**: `git branch -d <source-branch>` (only if user explicitly selects)
- **Delete remote branch**: `git push origin --delete <source-branch>` (only if user explicitly selects)
**Default behavior**: Keep the source branch and continue working on it.
**If user chooses to delete:**
- Execute deletion commands
- Stay on target branch (since source branch no longer exists)
10. **Display summary**
Show:
- Source branch
- Target branch
- Merge strategy used
- Merge commit hash
- Files changed count
- Push status
- Branch deletion status (if applicable)
**Output On Success**
```
## Merge Complete
**Source:** <source-branch>
**Target:** <target-branch>
**Strategy:** Standard / Squash / No-ff
**Commit:** <merge-commit-hash>
<source-branch> ──► <target-branch>
**Changes merged:** <count> files (+<additions>, -<deletions>)
**Post-merge:**
- Source branch kept: Yes (default) / No (deleted)
- Switched back to: <source-branch>
**Remote:** <remote-url>
```
**Output On Conflict**
```
## Merge Conflict
**Source:** <source-branch>
**Target:** <target-branch>
**Conflicted files (<count>):**
- <file1>
- <file2>
**Options:**
1. Abort merge
2. Manual resolve (I'll wait for you to resolve)
3. Use "theirs" for all conflicts
4. Use "ours" for all conflicts
What would you like to do?
```
**Merge Strategy Guide**
| Strategy | Use Case | Pros | Cons |
|----------|----------|------|------|
| Standard | Feature branches | Preserves history | Multiple merge commits |
| Squash | Small features, WIP | Clean history | Loses individual commits |
| No-ff | Release branches | Clear merge point | Extra merge commit |
**Guardrails**
- Always check for uncommitted changes before merging
- Always check if source branch is pushed to remote
- Always prompt for target branch name before merging
- Always prompt for merge strategy
- Always fetch and pull target branch before merging
- **Always switch back to source branch after merge (default behavior)**
- **Keep source branch by default, only delete if user explicitly requests**
- Never force push without explicit user request
- Show clear summary of what happened
- Handle merge conflicts gracefully
**Common Target Branches**
When prompting, show these common branches if they exist:
- `master` / `main`
- `qa`
- `stg`
- `develop`
**Error Handling**
- If uncommitted changes: Ask user how to proceed (stash/commit/cancel)
- If source branch not pushed: Warn and ask to proceed or push first
- If target branch doesn't exist: Show error and suggest available branches
- If merge fails with conflicts: Show conflicted files and prompt for resolution
- If push fails: Show error message and suggest resolution