What you need
A commit range or a pasted git log. In this prompt version you paste the text yourself. The steps are under "How to use it" below.
The prompt
Use this in any chatbot (ChatGPT, Claude, Gemini and others). Nothing to install.
How to use it
- In your repo, run
git log --no-merges --format='%h %s%n%b---' v1.2.0..HEAD(use your own tag or range) and copy the output. - Copy everything from "COPY FROM HERE" to the end of this file and paste it into a new chat.
- Under it, paste the log.
You get a changelog section grouped under Added, Changed, Fixed and so on, with the commit hash behind each line, and a list of commits it could not understand. The chatbot sees only commit messages, not the code, so it will not know what a vague commit did: check the flagged ones.
Prefer to do it by hand? Walk the log once and put each user-facing commit under one heading; skip formatting, CI and refactors.
COPY FROM HERE
You write a changelog section for one release from the git log I paste below. Readers are people who use the project, not its maintainers. Every entry must trace to a commit; put the short hash in parentheses at the end of each line. Never invent a version number, date or breaking change. You see only commit messages, so do not describe behaviour beyond what a message says.
1. Decide for each commit whether it is user-facing. Keep new features, behaviour changes, noticeable bug fixes, removals and deprecations, security fixes and visible performance changes. Skip formatting, comment typos, CI, test-only changes and internal refactors (give one line at the end with their count and hashes).
2. Merge commits that belong together into one entry with all their hashes.
3. Write `## [VERSION] - DATE` (leave both as placeholders), then only the headings that have entries: Added, Changed, Fixed, Deprecated, Removed, Security. One line per entry in the reader's terms, for example "Fixed a crash when the config file is empty", not the commit's wording.
4. After the changelog list: vague commits (message does not say what changed) as [CHECK: hash "message"]; possible breaking changes only if a message says BREAKING or has "!" (otherwise say none were evident and that you saw only messages); skipped commits.
No marketing language.
Here is the git log:A real example
Real public data, anonymised. Taken from the skill's README.
The Express repository, last 15 commits: dependency bumps with CVE notes in the commit bodies, CI updates, a docs fix and one bug fix.
After (skill output, excerpt):
Security
- Raised the minimum
qsversion to 6.16.0, which patches CVE-2026-82417 (GHSA-4mjr-xmp4-gh2g) and CVE-2026-82562 (GHSA-x5fp-wj9c-mxmx). (3b7e39f)Fixed
res.sendnow still generates an ETag when aTransfer-Encodingheader is set. (9a34acf)[CHECK: 98bd4cd "deps: proxy-addr@^2.0.8 (#7474)"] The message gives no reason for the bump.
Skipped commits: 11
Limits
- It sees commit messages, and diffs only when it can.
- Breaking changes only from evidence.
- It writes text; it does not tag or publish.
The same job as an installable skill
Changelog from Commits is also a skill you install once and call in plain words, so you do not paste the prompt each time. It can use its helper scripts and web access where your assistant allows. See the skill page, or read how to install skills.
More for developers
Follow for new free skills
New free skills and guides appear in all of these as we publish them. Pick whichever you already use.
- RSS feed for any feed reader
- Watch the free skills repo on GitHub
- Follow on Gumroad