Every developer has been there. You finish coding, stage your changes, and then... blank. What do you call this commit?
"fixed stuff"
"updated"
"changes lol"
It's not your fault. Writing good commit messages is hard. You need to:
A good commit message takes 2+ minutes to write. Do that 5-10 times a day and you've wasted 15-30 minutes on... typing.
| Approach | Problem |
|---|---|
git commit -m "wip" |
|
| Useless for history, code reviews, changelogs | |
| Manual Conventional Commits | Mentally taxing, easy to get wrong |
AI-powered tools (aider , claude commit ) |
|
| Requires API key, internet, costs money per commit, slow | |
| Commitlint + prompts | Still requires you to write the message |
None of these are ideal. Either they're too slow, too expensive, or still require manual effort.
git-copilot reads your staged
git diff
and generates a
$ git add .
$ git-copilot gen
β¨ feat(api): add user routes and controller
3 file(s), +124/-15 lines
The key difference from everything else:
β Zero AI β No LLM, no API calls, no internet needed
β Zero dependencies β Pure Python stdlib, works offline
β Instant β Runs in <100ms, not 10 seconds
β Free β Open source, MIT licensed
No machine learning. No pattern matching black box. Just smart heuristics:
File-type mapping: It knows what type of change a file represents:
| If you changed | It detects |
|---|---|
src/*.py or src/*.js |
|
feat (feature) |
|
*_test.py or *.spec.js |
|
test |
|
README.md or docs/* |
|
docs |
|
Dockerfile or .github/* |
|
ci |
|
.css or .scss |
|
style |
|
config.yaml or .env |
|
chore |
Scope inference: It looks at the directory structure. Files in api/
β scope: api
. Files in ui/
β scope: ui
.
Smart description: It parses the diff to find function names, class names, and meaningful changes β then synthesizes a human-readable description.
$ git diff --cached
diff --git a/src/api/users.py b/src/api/users.py
+ def create_user(email, password):
+ return User(email=email, password=hash(password))
+ async def get_user_profile(user_id):
+ return await db.users.find_one({"_id": user_id})
$ git-copilot gen
β¨ feat(api): add user CRUD operations with profile support
1 file(s), +28/-0 lines
git add .
git-copilot gen
git-copilot gen | git commit -F -
Add this to .git/hooks/prepare-commit-msg
:
#!/bin/bash
git-copilot gen > "$1"
Now every git commit
automatically gets a smart message.
Add to your keybindings.json
:
{
"key": "ctrl+shift+c",
"command": "workbench.action.terminal.sendSequence",
"args": { "text": "git add . && git-copilot gen | git commit -F -\u000D" }
}
I've tried claude commit
, aider
, and GitHub Copilot's commit feature. They're impressive, but:
feat(api): add route
β a regex table is sufficient.git-copilot is the hotkey version β instant, private, and it never charges per commit.
pip install git-copilot
That's it. One command. No API keys, no config files, no Docker.
git-copilot --help
The CLI is free and open source forever. But if you want more firepower for your team, the Git Commit Copilot Pro Templates Pack adds:
| Feature | Free CLI | Pro Pack |
|---|---|---|
| Auto-detect type & scope | β | β |
| Conventional Commits spec | β | β |
| Configurable type emojis | β | β |
| Custom commit templates for teams | β | β |
| Multi-line body & footer | β | β |
| CI/CD formatted output | β | β |
| Breaking change markers | β | β |
| Jira/Linear issue integration | β | β |
| Priority updates & new templates | β | β |
| Price | ||
| Free | ||
| $9.99 |
Your commit history is your project's diary β it should tell a coherent story, not scream "idk lol". git-copilot makes good commit messages effortless by removing the mental overhead.
No AI. No SaaS. No subscription. Just a smart little script that reads your code and tells you what changed.
β Star on GitHub | πΎ Install Now
P.S. If this resonates, check out the Pro Templates Pack β it's what I use for my own team.