Skills
Skill 195 of 200
Use this skill when the user wants to make a Git commit or split changes into more than one commit.
4 minutes · 908 words · 12 sections
Install
npx skills add github/awesome-copilot --skill git-commitnpx skills add github/awesome-copilot/plugin marketplace add github/awesome-copilotThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
Make Git commits that follow the Conventional Commits 1.0.0 (opens in a new tab) specification. Get the type, the scope, and the summary from the diff.
<type>(<scope>): <summary>
<body>
<footer><type>: <summary>.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.Conventional Commits defines only feat and fix. The other types come from the Angular convention (@commitlint/config-conventional (opens in a new tab)). 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 |
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.Find the commit rules before you write a message:
commitlint.config.js or .commitlintrc.json.CONTRIBUTING.md.git log --oneline -10.If a repository rule is different from this skill, use the repository rule.
git status --porcelain
git diff --staged
git diffIf 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.
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 --longA 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.
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”.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:
u UU N... or u AA N....100644, 100755, or 000000.git diff --no-relative does not show Binary files differ for the file.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>.git add --resolved -- <paths>.git diff --check -- path/to/file1 path/to/file2
git add -- path/to/file1 path/to/file2git diff --check finds no “leftover conflict marker” line. Ignore whitespace warnings from the other branch.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.git add -- <paths>.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/git add -p or git add -i. These commands wait for input from a person.git diff --staged --name-only. Do not commit secrets, for example .env files, credentials.json, or private keys.Get each part from the diff:
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>.
git log -1 --stat --first-parent
git status --porcelain--no-verify unless the user tells you to. Hooks can be in .git/hooks or in the Git configuration.git commit command again. Do not use --amend, because it changes the previous commit.git reset --hard, git rebase, or the experimental git history command.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 verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
shell(git:*)skills/git-commit/SKILL.mdmain, last pushed 9 November 2026.SKILL.md, not by matching a directory convention. 2 distinct layouts observed: .github/skills/*/SKILL.md, skills/*/SKILL.md.h1 and no skipped levels:.github/plugin/marketplace.json by GitHub, declaring 211 plugins. It is read for editorial metadata only — never as the skill index, which is always the repository tree./github/awesome-copilot.md, and each skill at its own .md URL.