Commit Message Writer
Paste a diff, get a message that says what changed and why.
This tool sends your text to a server. Nothing else on this site does.
Your diff, or a description of the change
0 of 20,000 characters
Result
Ask about Commit Message Writer
Questions about what this tool does, which option to pick, or what it can and cannot handle.
The question you type here is sent to an AI provider to be answered — your files and whatever you put in the tool above are not, and the assistant cannot see them. Answers are generated and can be wrong. So is what the tool above produces — it runs on a model too.
About the Commit Message Writer
A commit message is written in ten seconds and read for years, usually by someone bisecting a regression at an unreasonable hour. "Update files" and "fix stuff" are cheap at the moment of writing and expensive every time afterwards, which is the exact shape of debt that never gets repaid.
Paste a diff here and get a message that describes the change rather than the file list. The distinction is the whole point: "Update media.ts" restates what the version control system already knows, while "Fix crash when the file has no audio track" tells the person reading the log the thing they came for.
Three conventions are supported. Conventional Commits produces the type, scope and description format that changelog tooling parses, with the exclamation mark and the breaking-change footer where they apply. A plain summary line is one line, imperative, no full stop. The descriptive form adds a body of a few lines wrapped at seventy-two characters explaining what changed and why.
The subject line limit is adjustable and defaults to seventy-two characters, which is the width that survives in git log without wrapping in most terminals. Imperative mood throughout — add, not added or adds, because the message completes the sentence "this commit will".
The switch for the reason is worth leaving on. Where the diff shows why — a bug being fixed, a constraint being satisfied, a check being added after something got through — it says so. Where the motivation genuinely is not visible in the diff, it leaves a bracketed placeholder rather than inventing a rationale, because a plausible invented reason in a commit log is worse than no reason at all: it will be believed.
If the diff is plainly two unrelated changes, it says so and offers a message for each, which is a hint that you probably wanted two commits.
Nothing about an issue number, a ticket or a co-author is added unless it appears in what you pasted.
How to use it
- 1Run git diff --staged and paste the output, or describe the change in words.
- 2Pick the convention your project uses.
- 3Set the subject line limit if your team uses something other than seventy-two characters.
- 4Read the message against the diff — it should describe the change, not the files.
- 5Fill in any bracketed placeholder about why the change was made before committing.
Questions
- Can it work out why I made the change?
- Only where the diff shows it. A test added alongside a fixed boundary condition tells its own story; a refactor with no other evidence does not. When the reason is not visible it leaves a marked gap rather than inventing motivation, because an invented reason in a commit log is a lie that future readers have no way to detect.
- How large a diff can I paste?
- Twenty thousand characters. Beyond that the message is going to be vague regardless of the tool, and a diff that large is usually several commits that have not been separated yet.
- Is it safe to paste a diff from a private repository?
- It goes to the AI provider like everything else in this category, so treat it as you would pasting the same code into any external service. Check your employer's policy. If in doubt, describe the change in words instead — that works nearly as well and sends nothing but your own sentence.
- Why does it sometimes give me two messages?
- Because the diff contains two unrelated changes. That is a hint rather than a limitation: unrelated changes in one commit are what make a later bisect ambiguous and a later revert awkward.

