From c321f50e76d175fcec93f629ba40821fd6192746 Mon Sep 17 00:00:00 2001 From: filipi87 Date: Wed, 20 May 2026 10:29:03 -0300 Subject: [PATCH] New skill to squash commits. --- .claude/skills/squash-commits/SKILL.md | 91 ++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 .claude/skills/squash-commits/SKILL.md diff --git a/.claude/skills/squash-commits/SKILL.md b/.claude/skills/squash-commits/SKILL.md new file mode 100644 index 000000000..9cb1b0afa --- /dev/null +++ b/.claude/skills/squash-commits/SKILL.md @@ -0,0 +1,91 @@ +--- +name: squash-commits +description: Reorganize messy branch commits into a small set of logical, meaningful commits without changing any content. Drops merge-from-main commits. Safe: creates a backup branch first. +--- + +Reorganize the commits on the current branch into a small number of logical commits. Do NOT change any file content — only the commit structure changes. + +## Instructions + +### 1. Safety check + +```bash +git status --short +``` + +If there are uncommitted changes, stop and tell the user to commit or stash them first. + +### 2. Inspect the branch + +```bash +git log main..HEAD --oneline +git diff main..HEAD --name-only +``` + +List every file changed vs `main` and every commit on the branch (excluding merge commits from main). + +### 3. Create a backup branch + +```bash +git branch backup/ +``` + +Tell the user the backup exists so they can recover if needed. + +### 4. Soft-reset to main and unstage everything + +```bash +git reset --soft main +git restore --staged . +``` + +All branch changes are now in the working tree, unstaged. No content has changed. + +### 5. Plan the logical groups + +Read the changed files and the original commit messages to understand what the work covers. Group related files into logical commits. Typical groups: + +- Core feature or fix (new source files + modified core files) +- Secondary features or fixes (each as its own commit if distinct) +- Refactoring or renames +- Tests +- Changelogs / docs + +Use the changelog files (if any) as a strong hint — each changelog entry often maps to one commit. + +Present the proposed grouping to the user and ask for confirmation before committing. + +### 6. Commit in logical groups + +For each group, stage only the relevant files and commit with a clear message following the project's conventions: + +```bash +git add ... +git commit -m "..." +``` + +Use conventional commit prefixes if the project uses them (`feat:`, `fix:`, `refactor:`, `test:`, `chore:`). + +### 7. Verify + +```bash +git log main..HEAD --oneline +git diff main..HEAD --name-only +git status --short +``` + +Confirm: +- Commit count is small and each message is meaningful +- The set of changed files vs `main` is identical to before +- Working tree is clean + +### 8. Remind about force-push + +The branch history has been rewritten. Tell the user they will need to `git push --force-with-lease` when they are ready to update the remote. Do NOT push automatically. + +## Rules + +- Never change file contents. If you find yourself editing a file, stop. +- Never skip the backup branch step. +- Never force-push without explicit user instruction. +- If any step fails or the result looks wrong, tell the user and suggest restoring from the backup: `git reset --hard backup/`.