git-squash
Git Squash
Pre-flight Checks
Before merging, validate the environment:
- Determine source branch — use the argument if provided (
/git-squash feature/my-branch), otherwise use the current branch. - Verify not on main — if the source branch is
main, abort with an error. - Check for uncommitted changes — run
git status --porcelain. If there are uncommitted changes, abort and suggest committing or stashing first. - Verify branch exists — confirm the source branch exists locally (
git rev-parse --verify <branch>). - Verify divergence from main — run
git log main..<branch> --oneline. If empty, abort — nothing to merge.
Switch to Main
git checkout main
If a remote origin exists, pull latest:
git pull --ff-only
If --ff-only fails, abort — main has diverged and needs manual resolution.
Squash Merge
git merge --squash <branch>
If the merge produces conflicts:
- Abort immediately:
git merge --abort - Switch back to the source branch:
git checkout <branch> - Suggest the user rebase first:
Merge conflicts detected. Run `git rebase main` on your branch to resolve conflicts, then retry. - Stop — do not proceed.
Delegate to git-commit
After a successful squash merge, invoke /git-commit to handle the commit. This delegates the full 7-step workflow:
- Sensitive File Guard
- Auto-stage tracked changes
- Multi-concern analysis
- Commit message generation (Conventional Commits with inferred type/scope)
- Heredoc commit with
Co-Authored-Bytrailer - Hook failure handling
Do not write commit messages directly — always delegate.
Post-merge Verification
After the commit succeeds:
git log --oneline -5
git status
git diff
Confirm: clean working tree, squash commit visible at HEAD, no leftover staged changes.
Cleanup
Delete local branch
First, try safe delete:
git branch -d <branch>
If -d fails because git doesn't recognise the squash merge (expected — squash merges don't preserve commit ancestry), verify there is zero diff between main and the branch:
git diff main <branch>
If the diff is empty (content fully merged), force-delete is safe:
git branch -D <branch>
If there IS a diff, do not delete — something was lost in the squash. Investigate before proceeding.
Delete remote branch (if exists)
Check if a remote tracking branch exists:
git ls-remote --heads origin <branch>
If it exists:
git push origin --delete <branch>
Rules
- Proceed without confirmation — pre-flight checks are the safety gate. Do not ask the user to approve before merging.
- Only merge into
main— never squash-merge into other branches. - Always use
--squash— never fast-forward or regular merge. - Always delegate the commit to
/git-commit— never write commit messages directly. - Abort on merge conflicts — never auto-resolve.
- Never force-push (
--force,--force-with-lease). - Prefer
git branch -d— use-Donly after verifying zero diff between main and the branch (squash merges don't preserve ancestry, so-dwill fail even when content is fully merged). - If any step fails, stop and report the error — do not continue the workflow.
Quick Reference
- Pre-flight: verify branch, check uncommitted changes, confirm divergence from main.
- Switch to main, pull latest with
--ff-only. git merge --squash <branch>— abort on conflicts, suggest rebase.- Delegate commit to
/git-commit(Sensitive File Guard, Conventional Commits, heredoc). - Verify:
git log,git status,git diff. - Cleanup:
git branch -d(fall back to-Dafter verifying zero diff),git push origin --delete(if remote exists).
More from ralphcrisostomo/nuxt-development-skills
ralph
Convert PRDs to prd.json format for the Ralph autonomous agent system. Use when you have an existing PRD and need to convert it to Ralph's JSON format. Triggers on: convert this prd, turn this into ralph format, create prd.json from this, ralph json.
52prd
Generate a Product Requirements Document (PRD) for a new feature. Use when planning a feature, starting a new project, or when asked to create a PRD. Triggers on: create a prd, write prd for, plan this feature, requirements for, spec out.
39optimise-claude
Use when auditing, trimming, or restructuring AI instruction files (CLAUDE.md, SKILL.md, AGENTS.md) to reduce context-window consumption. Trigger whenever CLAUDE.md is bloated or Claude ignores instructions, a SKILL.md exceeds 120 lines, skills share duplicated content, AGENTS.md has large inline blocks, or the user asks to optimize, slim down, or reduce token usage.
37nuxt-init
Use when scaffolding a new Nuxt 4 project with standard config files (prettier, eslint, gitignore, husky, vitest, tsconfig, sops) and bun scripts.
33nuxt-terraform
Scaffold Nuxt + AWS Terraform infrastructure. Use when adding GraphQL resolvers, Lambda functions, initializing a new project with AppSync, DynamoDB, Cognito, writing Terraform tests, or generating/reviewing Terraform code style. Triggers on: add graphql resolver, create lambda, scaffold terraform, init terraform, add appsync resolver, add mutation, add query, add terraform test, write tftest, terraform style.
32todo
Use when scanning a codebase for incomplete work and maintaining a living TODO.md grouped by feature. Triggers on: scan for todos, find incomplete work, update todo, what needs doing, create todo list.
30