All skills
paulrberg avatar

/git-squash

@11c939a
by Paul Bergpaulrberg/agent-skills94 stars
7

Squash a feature branch into one commit via soft reset to the merge base, ready for a clean PR.

Use this Skill: https://skilld.dev/gh/paulrberg/agent-skills/git-squash

This session only. Nothing lands on disk.

SKILL.md

≈27 tokens always: the name and description. ≈1k when used: this file. ≈11 more on demand in 1 file.

Git Squash

If these instructions are already present in the conversation from a slash or dollar invocation, follow them directly; do not invoke this skill again through a skill tool.

Squash the current feature branch into one commit representing its net change relative to the resolved default branch.

Arguments

  • --subject <line>: require this exact first line in the replacement commit message.
  • --base <branch>: override default-branch detection.

Without --subject, the agent writes a subject from the surviving net diff in the repository's message format. Without --base, the helper resolves origin/HEAD, then local/remote main, master, or trunk.

Plan Interface

Resolve the helper from this SKILL.md. Write its JSON to a scratch path outside the repository so preflight remains clean:

uv run "<skill-dir>/scripts/git-squash.py" plan \
  [--cwd <repo>] [--base <branch>] [--subject <line>] > <plan.json>

plan is read-only. It verifies the Git worktree, attached branch, clean tree/index, resolved base, non-default current branch, merge base, positive ahead count, and remote facts. It returns schemaVersion: 1, the immutable original HEAD, merge base, base ref, commits in chronological order, unique authors, tree/remote state, and rollback facts. A failed precondition exits without changing history.

Show the branch, base ref, merge base, commits replaced, tree state, remote state, and rollback HEAD in a compact plain table before mutation.

Agent-Owned Commit Message

Inspect the plan's commits and the net diff from mergeBase..originalHead. The net diff is authoritative; intermediate commits supply intent and attribution only. Inspect targeted hunks when the summary is ambiguous.

Use --subject exactly when supplied. Otherwise read format under [message] in <git-root>/.agents/commit.toml; its value is natural or conventional, and an absent file or key means conventional.

  • natural: write a natural-language imperative subject with no type prefix, such as Add retry to webhook delivery.
  • conventional: choose the type from the surviving outcome: feat, fix, refactor, docs, test, build, ci, chore(deps), style, perf, revert, ai, or chore. Do not call the change chore merely because it is a squash. Keep the subject lowercase after the prefix.

Keep the subject imperative, specific, and without a trailing period. Add at most five body bullets for distinct surviving outcomes; omit the body when the subject is sufficient. Do not dump paths or statistics. Append one Co-authored-by: Name <email> trailer for each plan author other than the current Git user. The agent owns all semantic wording and must ensure every statement is supported by the net diff.

Write the final message to a scratch file outside the repository.

Apply Interface

uv run "<skill-dir>/scripts/git-squash.py" apply \
  --plan <plan.json> --message-file <message.txt>

apply binds the rewrite to the plan's original HEAD, branch, merge base, base ref, clean state, rollback index, and optional subject. It revalidates them immediately before mutation; a stale plan fails without changing history. It soft-resets to the merge base, verifies the staged net diff is non-empty, and commits from the message file.

If any operation fails after mutation but before the replacement commit completes, the helper restores the original HEAD and exact index. It leaves working-tree files untouched. Do not reproduce the reset/rollback sequence manually or continue after a helper failure without inspecting its diagnostic and current Git state.

Report

On success, report the plan's replaced count, resolved base ref, new hash, and subject. If the branch exists on origin, state the exact next action git push --force-with-lease; do not run it unless explicitly requested.

Lead with ### ✅ Squashed — <old count> commits → 1. Keep preflight facts, hashes, commands, errors, and rollback wording plain and exact.

Source: SKILL.md on GitHub

No alerts5d3 checks · Risk SAFE
  • Gen Agent Trust Hub5d

    The git-squash skill is a developer tool designed to consolidate multiple commits on a feature branch into a single commit. It uses a Python helper script to interact with the local Git repository via secure subprocess calls. The analysis found no evidence of malicious intent, credential exfiltration, or unauthorized network activity. The skill follows best practices by using a two-phase 'plan' and 'apply' workflow with rollback capabilities.

  • Socket5d

    No alerts

  • Snyk5d

    Risk: LOW · No issues

Signed by skilld at 11c939a. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 6 days ago
argument-hint
[--subject <line>] [--base <branch>]
disable-model-invocation
true
effort
high

README badge

README badge for paulrberg/agent-skills/git-squash