Generated banner for Git Commit
Generated logo for Git Commit

Git Commit

MicrosoftOfficialPublished by Microsoft

  • Skill
  • Workflow
  • Software development
  • MIT
  • No issues found

From the author

Stage user-selected paths, confirm the exact staged set, and create one local Conventional Commit, or generate a commit message for staged changes without committing. Use when you want a guarded commit or a ready-to-paste message.
— the description by Microsoft

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured process for managing Git commits. It allows users to inventory changes, select specific paths to stage, confirm the staged set, and generate a standardized commit message following Conventional Commit conventions. It also supports a message-only mode for generating commit messages without modifying the Git index, and provides a mechanism for post-commit adjustments if a user needs to undo or edit the message of the most recent commit.

What it does

  • Inventories tracked, untracked, and modified file paths.
  • Stages user-selected paths while preserving existing staged changes.
  • Generates Conventional Commit messages with types, scopes, and footers.
  • Provides a message-only mode to generate commit text without staging.
  • Allows for post-commit undo or message modification.
  • Validates the staged set before finalizing the commit.

When to use it

  • When you want to ensure only specific files are included in a commit.
  • When you need help drafting a commit message that follows standard conventions.
  • When you want to generate a commit message to copy and paste manually.
  • When you need to quickly undo a commit to adjust its message.

Advantages

  • Prevents accidental staging of unintended files.
  • Enforces consistent commit message formatting.
  • Provides a safe, step-by-step confirmation process.
  • Allows for easy correction of the most recent commit message.

Usage examples

“git-commit”
The agent inventories changes, asks you to select paths, confirms the staged set, and creates a commit with a generated Conventional Commit message.
“git-commit mode=message-only”
The agent analyzes your staged changes and outputs a formatted Conventional Commit message in a code block for you to copy.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/microsoft/git-commit/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip git-commit.zip -d .agents/skills

Documentation by Microsoft

<!-- cspell:ignore pathspecs unstages -->

Git Commit

Goal

Create one local Conventional Commit from whole paths the user selects and confirms, or generate a message for the currently staged changes without touching the index.

Inputs

  • mode (optional): commit (default) runs the select, stage, confirm, and commit protocol. message-only generates a message for the staged changes and never stages, unstages, or commits.

Message Rules

Generate every message by following references/commit-message.md. It owns types, scopes, description and body limits, and the footer line. Once generated, the message is authoritative for the commit.

Message-Only Mode

  1. Read the staged changes with git --no-pager diff --staged. Use the host's staged-changes tool instead when the user asks to avoid the terminal or no terminal is available.

  2. When nothing is staged, output No changes to commit. and stop.

  3. Generate the message from the complete staged diff.

  4. Output the message in a fenced code block and tell the user to copy it as-is or edit it before committing.

Commit Protocol

  1. Inventory candidate paths. Before changing the index, run git status --porcelain=v1 -z --untracked-files=all and git rev-parse --verify HEAD in the target repository.

    • Record tracked, untracked, deleted, renamed, copied, and initially staged paths. Treat only an R or C status record that supplies both old and new paths as one logical selection. Present a separate deletion and untracked addition as independent candidates without inferring a rename.

    • If HEAD cannot be verified, stop, because this workflow cannot restore a rejected staging change safely.

    • If any path has both staged and unstaged changes, stop and ask the user to resolve its hunk-level intent outside this workflow. Do not restage a partially staged path.

    • If there are no candidate changes, output No changes to commit. and stop.

  2. Confirm whole-path intent. Present the candidate paths and their states without file contents, then ask the user to select the whole paths intended for this commit.

    • Every initially staged path must be selected. If the user excludes one, stop before changing the index; never unstage prior user work.

    • A status-reported rename or copy is selected only as its complete old-and-new path pair.

    • If the selection is empty, ambiguous, unsafe to represent as shell arguments, or absent, stop without staging or committing.

  3. Stage only the selection with git --literal-pathspecs add -- <safely quoted selected paths>. Never use an unscoped git add -A or git add -u path.

    • Quote each path for the active shell and keep -- before path arguments. If a path cannot be represented safely, stop.

    • Record only the selected paths that were not initially staged as this invocation's staging delta.

    • If staging fails, report a concise error and stop without retrying.

  4. Inspect and confirm the staged set. Use the host's staged-changes tool, such as get_changed_files with sourceControlState set to staged and repositoryPath set to the full project path.

    • Verify that the exact staged path set contains every selected path, contains every initially staged path, and contains no unselected path. If it differs, restore this invocation's staging delta and stop.

    • Present the exact staged paths without file contents or suspected sensitive values. Ask the user to confirm that these paths and their staged content are intended for the local commit.

    • If the user rejects, does not respond, or gives an ambiguous answer, restore this invocation's staging delta and stop without committing.

    • If no staged changes remain, output No changes to commit. and stop without creating an empty commit.

  5. Generate the message from the staged changes and commit once, without showing the message first.

    • Pipe the exact message, including body and footer line, through STDIN, for example echo "<full message>" | git commit -F -. Preserve newlines exactly and end with the footer line followed by a newline.

    • Run no other Git command at this step (no push, pull, fetch, diff, show, status, log, branch, switch, merge, rebase, or tag).

  6. After the commit succeeds, print Commit created successfully with the following message:, a blank line, and the full message in a fenced markdown code block.

  7. If the commit fails, for example because a hook rejects it, report a concise error with a suggested fix and stop without retrying.

Staging-Delta Restoration
  • Restore only paths newly staged by this invocation with git --literal-pathspecs reset -- <safely quoted staging-delta paths>. This resets their index entries to HEAD, preserves working-tree content, and leaves initially staged paths unchanged.

  • Treat both paths of a selected status-reported rename or copy as one restoration unit.

  • If restoration fails, report the affected path names and stop. Do not retry or run another recovery command.

Allowed Commands
  • Normal flow: git status --porcelain=v1 -z --untracked-files=all, git rev-parse --verify HEAD, path-scoped git --literal-pathspecs add -- <paths>, path-scoped git --literal-pathspecs reset -- <paths> for staging-delta restoration only, and git commit -F - or a single-line git commit -m.

  • Adjustment flow: git reset --soft HEAD^ as defined in Post-Commit Adjustments.

  • Never use Git CLI to obtain file contents or diffs in commit mode. Use git status only for path and index-state metadata, and rely on the staged-changes tool for staged content.

  • Never use root .gitignore presence, absence, length, or completeness as staging authorization.

  • Never add a pre-commit hook, require a secret-scanner dependency, or claim that this workflow performs deterministic secret detection. Repository-owned scanning remains a separate downstream control.

Post-Commit Adjustments

Start this flow only when, immediately after the commit is displayed, the user explicitly asks to change its message or to undo it.

  1. Treat the commit just created in this session as the target; do not run history commands to confirm it.

  2. Run git reset --soft HEAD^ to uncommit while preserving the index and working tree.

  3. For an undo without a new message, print Commit undone (changes staged, no new commit message requested). and stop without committing.

  4. For a message change, merge the requested edits into the previous message, correct anything that breaks the commit message conventions, and commit again with git commit -F -.

  5. Print Commit message updated successfully:, a blank line, and the updated message in a fenced markdown code block.

Constraints for this flow:

  • Use one soft reset per commit created; repeat only after the user acknowledges the previous update.

  • Never amend, rebase, or use the reflog, and never change file contents; only the message changes.

  • Keep the original type and scope unless the user supplies valid replacements, and keep exactly one footer line last.

  • If the reset or the new commit fails, report a concise error and stop.

Success Criteria

  • Wait only for the two required user decisions: whole-path selection before staging and exact staged-set confirmation before commit. Never infer either decision from silence.

  • Only selected paths and initially staged paths enter the commit, and a rejected staged set leaves the initial index and working tree unchanged.

  • Message-only mode leaves the index untouched.

  • No push or remote operation occurs.

Example Output

Commit created successfully with the following message:

```markdown
feat(prompts): update work item prompts to clarify json output

🔒 - Generated by Copilot
```

Files

ATTRIBUTION.md

Attribution

This folder is an unmodified copy of the Agent Skill "git-commit", distributed by AutoGineer (https://autogineer.com/agent-skills).

The skill's own files are unmodified copies. AutoGineer is not affiliated with or endorsed by the author or the publisher.

Files added by AutoGineer

  • ATTRIBUTION.md: this file, written by AutoGineer

  • LICENSE: copied from LICENSE

Requirements and compatibility

Written for: GitHub Copilot, Claude Code

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Claude Code frontmatter

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Microsoft
Publisher
Microsoft (Official)
Source
microsoft/hve-core · .github/skills/hve-core/git-commit · commit f425e94
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Microsoft or Microsoft.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download git-commit.zip