Generated banner for Git Commit
Generated logo for Git Commit

Git Commit

GitHubOfficialFirst committed by AungMyoKyawDistributed by GitHub

  • Skill
  • Tool integration
  • Software development
  • MIT
  • No issues found

From the author

Use this skill when the user wants to make a Git commit or split changes into more than one commit. Also use it when the user types "/commit" or asks for a conventional commit. The skill examines the diff, stages the related files, writes a Conventional Commits message, and runs git commit. Do not use it when the user wants only a commit message and no commit. Do not use it to push, open a pull request, rebase, or change the commit history.
— the description by AungMyoKyaw

AutoGineer summary

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

This skill streamlines the Git commit process by ensuring messages adhere to the Conventional Commits specification. It analyzes the current repository state, identifies staged or unstaged changes, and constructs a structured commit message including type, scope, and summary. The skill handles complex scenarios like merge conflicts and multi-part commits while respecting existing repository configurations and safety protocols.

What it does

  • Analyzes repository diffs to determine appropriate commit types and scopes.
  • Stages files based on logical changes while avoiding sensitive files like credentials.
  • Generates commit messages following the Conventional Commits 1.0.0 specification.
  • Handles ongoing Git operations like merges, cherry-picks, or reverts safely.
  • Supports multi-paragraph commit messages for detailed documentation.
  • Verifies commit success using log and status checks.

When to use it

  • When you need to create a commit that follows the Conventional Commits standard.
  • When you want to split complex changes into multiple logical commits.
  • When you have uncommitted changes and want an AI to handle the staging and message generation.
  • When working in a repository that requires standardized commit history.

Advantages

  • Ensures consistent and readable commit history across projects.
  • Reduces manual effort in staging files and drafting commit messages.
  • Safely manages complex Git states like merge conflicts.
  • Respects existing project-specific commit linting configurations.

Usage examples

“/commit”
The agent analyzes the current diff, stages the relevant files, and creates a commit with a Conventional Commits message.
“Create a commit for the recent changes to the authentication module.”
The agent identifies the changes in the auth directory, stages them, and generates a message like 'feat(auth): add token refresh'.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/github/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 AungMyoKyaw

Git Commit with Conventional Commits

Make Git commits that follow the Conventional Commits 1.0.0 specification. Get the type, the scope, and the summary from the diff.

Message Format

<type>(<scope>): <summary>

<body>

<footer>
  • The scope, the body, and the footer are optional. Without a scope, write <type>: <summary>.

  • Write the summary in the imperative mood: "add", not "added" or "adds".

  • Keep the first line at 72 characters or less. Do not put a period at the end.

  • In the body, tell what changed and why.

  • Write each footer as Token: value or Token #value, for example Refs: #456 or Closes #123. Conventional Commits accepts the two forms, but Git reads only Token: value as a trailer. In a token, use - in place of a space.

Types

Conventional Commits defines only feat and fix. The other types come from the Angular convention (@commitlint/config-conventional). If the repository has its own list, use that list.

TypeUse it for
featA new feature
fixA bug fix
docsDocumentation only
styleFormatting only, with no change to the logic
refactorA code change that is not a feature or a fix
perfA performance improvement
testNew or changed tests
buildThe build system or the dependencies
ciThe CI configuration
choreOther maintenance
revertA revert of an earlier commit

Breaking Changes

Put ! before the colon, or add a BREAKING CHANGE: footer. Write the token in uppercase. BREAKING-CHANGE: is also correct.

feat(api)!: remove the v1 endpoints

BREAKING CHANGE: Clients must use the v2 endpoints.

Workflow

1. Read the repository rules

Find the commit rules before you write a message:

  • A commitlint configuration, for example commitlint.config.js or .commitlintrc.json.

  • CONTRIBUTING.md.

  • The recent messages: git log --oneline -10.

If a repository rule is different from this skill, use the repository rule.

2. Examine the changes
git status --porcelain
git diff --staged
git diff

If there are no changes, run the checks at the start of step 3. If they find MERGE_HEAD, continue. If not, tell the user what git status --long shows. Do not make an empty commit.

3. Stage the files

First, check for an operation in progress. Run each command alone. Do not chain them with &&. In a subdirectory, run every command in this step as git -C <root> .... git rev-parse --show-toplevel prints the root.

git rev-parse -q --verify --symbolic-full-name MERGE_HEAD
git rev-parse -q --verify --symbolic-full-name CHERRY_PICK_HEAD
git rev-parse -q --verify --symbolic-full-name REVERT_HEAD
git diff --name-only --diff-filter=U --no-relative
git status --long

A rev-parse command prints a ref name if its operation is in progress. If not, the command prints nothing and exits with status 1. The git diff command lists unmerged files. It finds conflicts that have no ref, for example from git stash pop. git status --long shows the other cases.

If an operation is in progress or there are unmerged files, do not unstage files. Do not split the commit. The index holds the result of the operation. If you unstage a file, Git drops the changes of the other side or removes a conflict entry.

  • Stop and tell the user if git status --long shows "rebase in progress", "You are in the middle of an am session", "Cherry-pick currently in progress", or "Revert currently in progress".

  • Run git status --porcelain=v2. A line that starts with u shows an unmerged file. You can resolve the file only if all these conditions are true:

    • The line starts with u UU N... or u AA N....

    • Each mode on the line is 100644, 100755, or 000000.

    • git diff --no-relative does not show Binary files differ for the file.

  • Ask the user how to resolve all other unmerged files. Git cannot find conflict markers in these files. git add --resolved and the checks below stage these files without a warning. Stage each of these files only after the user resolves it: git add -- <path>.

  • With Git 2.56 or later, stage the files that you can resolve with git add --resolved -- <paths>.

  • With older Git, check those files and stage them:

git diff --check -- path/to/file1 path/to/file2
git add -- path/to/file1 path/to/file2
  • Stage the files only if git diff --check finds no "leftover conflict marker" line. Ignore whitespace warnings from the other branch.

  • Then, with any Git version, run git diff --name-only --no-relative and git ls-files --others --exclude-standard. They list edits in other files. Skip the files that are still unmerged.

  • Show these paths to the user. Ask if they belong to the commit. Stage only the approved paths with git add -- <paths>.

  • Git quotes some paths, for example paths with non-ASCII characters. git add fails for a quoted path. Ask the user about these files.

If there is no operation and no unmerged file, put one logical change in each commit. If the staged files contain more than one change, first unstage the files of the other changes. Then stage the files for this change:

git reset -q -- path/to/other-file1 path/to/other-file2
git add -- path/to/file1 path/to/file2
git add -- '*.test.*'
git add -- src/components/
  • Put a glob in quotes. Without quotes, the shell expands the glob and does not find the files in subdirectories.

  • Do not use git add -p or git add -i. These commands wait for input from a person.

  • Examine the list of staged files with git diff --staged --name-only. Do not commit secrets, for example .env files, credentials.json, or private keys.

4. Write the message

Get each part from the diff:

  • Type: The kind of change.

  • Scope: The module or the area that the change affects.

  • Summary: What changed, in one line.

5. Commit

When step 3 finds MERGE_HEAD, CHERRY_PICK_HEAD, or REVERT_HEAD, run git commit --no-edit with no paths and no --cleanup option. This keeps the message that Git prepared. Do not write a new -m message. The message can keep the Conflicts: comment lines from Git. Do not remove them.

In all other cases:

Give each paragraph with a different -m option. Git puts a blank line between the paragraphs. This command works in Bash, PowerShell, and other shells.

git commit -m "feat(auth): add token refresh"
git commit -m "fix(parser): accept empty input" -m "An empty file caused a crash." -m "Closes: #123"

For a long message, write the message to a temporary file. Then run git commit -F <file>.

6. Make sure that the commit is correct
git log -1 --stat --first-parent
git status --porcelain

Safety Rules

  • Do not change the Git configuration.

  • Do not use --no-verify unless the user tells you to. Hooks can be in .git/hooks or in the Git configuration.

  • If a hook fails, Git does not make the commit. Fix the problem, stage the files again, and run the same git commit command again. Do not use --amend, because it changes the previous commit.

  • Do not change the commit history unless the user tells you to. Do not use git reset --hard, git rebase, or the experimental git history command.

  • Do not push unless the user tells you to. Do not force push to the default branch.

Files

LICENSE

MIT License

Copyright GitHub, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Requirements and compatibility

Written for: GitHub Copilot

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: Declares allowed tools, Needs a command-line tool

The author says: Requires Git. The `--resolved` option of `git add` requires Git 2.56 or later. Older versions use the fallback in step 3.

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

First committed by
GitHub avatar of AungMyoKyawAungMyoKyaw
Publisher
GitHub (Official)
Distributed by
GitHub
Source
github/awesome-copilot · skills/git-commit · commit 797337f
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Contributors
burakkaygusuz, AungMyoKyaw

AutoGineer is not affiliated with or endorsed by AungMyoKyaw or GitHub.

Download ZIP

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