git-commit
- Use it when:
- You want the agent to commit your work, or split it into several commits, with Conventional Commits messages.
- It does:
- Reads your repo's commit rules, examines the diff, stages one logical change, writes a type(scope): summary message and runs git commit.
- You get:
- Local commits, checked with git log; it never pushes, amends or rewrites history unless you ask.
- Unlike caveman-commit:
- That one only writes a message; this one stages the files and makes the commit.
- Handles:
- An interrupted merge: it keeps Git's prepared message, stages only safely resolved files and asks you about the rest.
TL;DR
A commit workflow built on the Conventional Commits 1.0.0 spec, with the extra types from commitlint's conventional config: docs, refactor, perf, test, ci, chore and others alongside feat and fix. The repository's own rules come first: a commitlint config, CONTRIBUTING.md and the style of the last ten messages override the skill's defaults. It examines the staged and unstaged diff, then checks for a merge, cherry-pick, revert or rebase in progress and for unmerged files. With none, it unstages anything that belongs to another change and stages this one by path, never with interactive git add -p, and leaves out secrets such as .env files or private keys. During a merge it doesn't unstage or split anything, stages only cleanly resolved text files, asks before adding other edited paths, and stops on a rebase. The message's first line is 72 characters or less, with an imperative summary and no period, an optional body on what changed and why, and footers such as Closes #123; breaking changes get a ! or a BREAKING CHANGE footer. It never changes Git config, doesn't skip hooks with --no-verify unless told, and after a failed hook fixes the problem and commits again rather than amending.
Summarizes the skill at 797337f.
npx skills add https://github.com/github/awesome-copilot --skill git-commit skills.sh pageSource on GitHubAll skills from github/awesome-copilot
- Total Downloads
- 48,300 on skills.sh, Nov 9, 2026
- Repo stars
- 40,943 github/awesome-copilot
- First seen
- Jan 23, 2026 on skills.sh
Weekly values
| Week to | Installs |
|---|---|
| Sep 21 | 517 |
| Sep 28 | 486 |
| Oct 5 | 446 |
| Oct 12 | 430 |
| Oct 19 | 425 |
| Oct 26 | 624 |
| Nov 2 | 585 |
| Nov 9 | 438 |
| Category |
Test-first work, implementation from specs, git hygiene and scope control. Everything for building software: planning, coding, debugging, design, frameworks, cloud, agents and skills. |
|---|---|
| Type |
A multi-step process the agent follows: interview, debug, run a TDD loop, review. |
| Effect |
Its own steps create or change files, git state or local tools. |
| Needs |
Instructions only. Works in any agent that supports skills. |
| Publisher |
A verified publisher on skills.sh, or the company or maintainer behind the product the skill operates. |
| Topics | |
| Stack |
SKILL.md
From github/awesome-copilot at 797337f. Checked daily, last changed Nov 6, 2026.
Frontmatter
name: git-commit
description: '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.'
license: MIT
compatibility: 'Requires Git. The `--resolved` option of `git add` requires Git 2.56 or later. Older versions use the fallback in step 3.'
allowed-tools: shell(git:*)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: valueorToken #value, for exampleRefs: #456orCloses #123. Conventional Commits accepts the two forms, but Git reads onlyToken: valueas 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.
| Type | Use it for |
|---|---|
feat |
A new feature |
fix |
A bug fix |
docs |
Documentation only |
style |
Formatting only, with no change to the logic |
refactor |
A code change that is not a feature or a fix |
perf |
A performance improvement |
test |
New or changed tests |
build |
The build system or the dependencies |
ci |
The CI configuration |
chore |
Other maintenance |
revert |
A 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.jsor.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 --longshows "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 withushows an unmerged file. You can resolve the file only if all these conditions are true:- The line starts with
u UU N...oru AA N.... - Each mode on the line is
100644,100755, or000000. git diff --no-relativedoes not showBinary files differfor the file.
- The line starts with
- Ask the user how to resolve all other unmerged files. Git cannot find conflict markers in these files.
git add --resolvedand 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 --checkfinds no "leftover conflict marker" line. Ignore whitespace warnings from the other branch. - Then, with any Git version, run
git diff --name-only --no-relativeandgit 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 addfails 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 -porgit 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.envfiles,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-verifyunless the user tells you to. Hooks can be in.git/hooksor 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 commitcommand 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 experimentalgit historycommand. - Do not push unless the user tells you to. Do not force push to the default branch.