Git Commit
MicrosoftOfficialPublished by Microsoft
- Skill
- Workflow
- Software development
- MIT
- No issues found
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
Download the skill as a ZIP:
https://autogineer.com/agent-skills/microsoft/git-commit/downloadUnzip 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-onlygenerates 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
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.When nothing is staged, output
No changes to commit.and stop.Generate the message from the complete staged diff.
Output the message in a fenced code block and tell the user to copy it as-is or edit it before committing.
Commit Protocol
Inventory candidate paths. Before changing the index, run
git status --porcelain=v1 -z --untracked-files=allandgit rev-parse --verify HEADin the target repository.Record tracked, untracked, deleted, renamed, copied, and initially staged paths. Treat only an
RorCstatus 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
HEADcannot 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.
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.
Stage only the selection with
git --literal-pathspecs add -- <safely quoted selected paths>. Never use an unscopedgit add -Aorgit add -upath.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.
Inspect and confirm the staged set. Use the host's staged-changes tool, such as
get_changed_fileswithsourceControlStateset tostagedandrepositoryPathset 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.
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).
After the commit succeeds, print
Commit created successfully with the following message:, a blank line, and the full message in a fencedmarkdowncode block.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 toHEAD, 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-scopedgit --literal-pathspecs add -- <paths>, path-scopedgit --literal-pathspecs reset -- <paths>for staging-delta restoration only, andgit commit -F -or a single-linegit 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 statusonly for path and index-state metadata, and rely on the staged-changes tool for staged content.Never use root
.gitignorepresence, 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.
Treat the commit just created in this session as the target; do not run history commands to confirm it.
Run
git reset --soft HEAD^to uncommit while preserving the index and working tree.For an undo without a new message, print
Commit undone (changes staged, no new commit message requested).and stop without committing.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 -.Print
Commit message updated successfully:, a blank line, and the updated message in a fencedmarkdowncode 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.mdAdded by AutoGineer825 B
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md8.0 KiB
- references/commit-message.md2.8 KiB
ATTRIBUTION.md
Attribution
This folder is an unmodified copy of the Agent Skill "git-commit", distributed by AutoGineer (https://autogineer.com/agent-skills).
Commit: f425e943bf228052a23e6bc4810b5faef030314f
Published by: Microsoft (https://github.com/microsoft)
Publisher: Microsoft (https://github.com/microsoft)
Licence: MIT License (https://spdx.org/licenses/MIT.html)
Licence evidence: declared in the frontmatter ("license: MIT")
Retrieved: 2026-11-07
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