Have Gemini stage and write commit messages for you
github.com
github.com
Commit message is not just a quick summary of what, it's also a historical record of why. Can't generate the latter from the diff.
e.g. - Add types for X, Y Z
if the PR goal is to make types more strict, that message is clear.
I feel like the quality will be worse than if the engineer really put some thought into it, but the problem is, commits are annoying to write.
A lot of people do “wip” or do a worse than average job.
Having a summary of what changed is still better than that.
Edit: if you feed more context about what you’re trying to develop it will probably be able to infer.
I’m totally cool with people using this as an initial draft and then manually tweaking it though.
Communicating intent should be trivial or, if it's not, put effort into it because communication with that future dev may be essential .
Now, maybe some bullet points may suffice and quickly be reshaped by AI to make it more succinct and clear but you still should make the effort. The more you do it, the more it becomes an easy part.
The problem is when you copy and paste the same info in slightly different ways in many places and I can appreciate some form of suggestion around "you missed explaining why you want to change this part".
There's a space for AIb but it isn't "so that I don't need to think".
In my mind, commit messages should be a quick summary of what. The basic motivation should be clearly labeled as a feature, bugfix, etc., but that's all. Commit messages are for quick browsing and a summary of what changed, not extensive justification.
The why is too important to be put in a commit message. The product why belongs in a linked issue that describes the bug or use case in full detail. Meanwhile, the technical why's (why this particular solution as opposed to alternatives) belong in the code itself as comments.
But the actual commit message should consist of History/Motivation/Context - so that someone who's going through the blame can understand why a certain change was made, and what the context was.
Linus had a good template for this, which makes a lot of sense: https://gist.github.com/finalfantasia/bd0070673ca27e5f7473
If I want my history, motivation and context to be ephemeral I put it in a commit message.
It still perplexes me why people obsess over commit messages while the places where people are actually looking when they have these questions are neglected.
The commit message is one place - and gives the author an opportunity to speak directly with a future developer over the place-in-time-context that this change was made.
If devs are constantly asking "what the fuck?" all over the code base then that's usually coz tests, code comments, docs and code quality were all badly neglected.
Better commit messages are a band aid over that gaping wound.
As a lame example - Incident Response/SRE will also be trying to get their heads around changes being made - especially if they're responding to an outage, and trying to figure out what change broke production - and why it was made.
Not everyone will know every bit of the project as intimately as the Dev team - and having a good commit message will help any unfamiliar response team mitigate, or escalate accordingly.
If you put some effort into your runbooks, not your commit messages, thats where they'll really appreciate good, detailed writing.
If thats what you got from my comment then you misinterpreted it.
Nobody wants docs to look like commit messages. They want them to be relevant to the context.
That's nice until you switch git hosts or project management systems and the context is lost. Commits live forever, use them.
At least a small summary of "why" would've been so helpful many times in the legacy codebase I maintain instead of "fix tests", "format", "FOO-123"
I agree about the technical justifications belonging in the source code itself as comments.
1. Majority of commit messages are low quality and would benefit significantly from a good summary of what was done.
2. Margin of commit messages is often too small for documenting the rationale - this job is better left for tickets.
Keeping that metadata in tickets means that it can’t be read within ‘git blame’. It’s also all too easy for it to be lost entirely when changing ticketing systems, transferring codebases between teams or companies, etc.
The commit message lives with the code. The number of times in my career that a company has migrated, changed, consolidated, or otherwise made all those links in commit messages obsolete, well I don't quite yet need two hands. But I see a lot of dead ends to context in code bases.
Why? At that point doesn't the diff speak for itself?
As you say, we know what’s there. I need the author to tell me why it’s there, and perhaps what other alternatives were abandoned because they didn’t work.
You know, so I don’t waste a day finding out for myself why you didn’t just do ${obvious}.
feat: Enhance Auto-Commit Bot with new features and improvements - Reworked the description to provide a more detailed overview of the tool's capabilities. - Added badges for license and Python version. - Updated the installation instructions to include environment variable setup for the Google Gemini API key. - Implemented logging for all actions to facilitate debugging and provide a comprehensive record of events. - Included a usage example to demonstrate the workflow of the tool. - Improved the commit message generation using the Google Gemini API for increased accuracy and context.
And
feat: integrate Gemini API for commit message generation This commit introduces integration with the Gemini API to enhance the automated commit message generation process.
The following changes were made:
- Added a `CommitMessageGenerator` class to generate commit messages using the Gemini API. - Modified the `ChangeDetector` to handle the generation and staging of commit messages. - Updated the CLI to accept an API key for Gemini API access. - Added error handling for missing API keys. - Implemented tests for the `CommitMessageGenerator`.
I would probably have it look at the files and try to generate a nice summary of “why”, but for those minor things where you add a parameter or fix whitespace I think this is OKish.
Fix: Remove platformio.ini from .gitignore and rename platformio.ini.dist
This commit removes platformio.ini from the .gitignore file and renames
platformio.ini.dist to platformio.ini. This allows the project's PlatformIO
configuration to be tracked by Git and ensures consistent build settings across
development environments. It also adds comments explaining how to configure OTA
updates and override settings with a separate marquee.ini file.Am I the only person in this world who is an accomplished engineer and thinks commit messages are worthless? That if I want to roll back or dissect, I do it at the PR and not individual commit level?
The need for very accurate comment messages occurs so rarely in my workflow that the value of crafting them correctly is not there.
I ask honestly: Am I missing something here? Why? Is it something peculiar to my workflow I'm missing?
If you run the kind of shop where your master branch is all merge commits, commit messages are useful.
But if I read these comments as "I wouldn't let an AI write my PR description", I strongly agree.
I noticed today that one of the big hardware stores in Switzerland has started using LLMs to generate descriptions. As expected, it's just drivel:
> Do you need a new sealing ring for your washbasin siphon? No problem. The Geberit plug-in seal is exactly what you need. With a diameter of 32/46 mm, it fits perfectly and ensures that everything is tight. It has a height of 5.5 cm and a length of 2.3 cm, making it easy to handle and quick to install. It's simply worth its weight in gold when everything fits at the first attempt and you don't have to worry about whether the quality is right. So, whenever your washbasin siphon needs a refresh, the Geberit plug-in seal with its 3.2 cm is your first choice. Simply insert and you're done.
https://www.jumbo.ch/de/bad-sanitaer/installationsmaterial/d...
There's a reason people feel TDD is hard if they don't want to think about properly modeling their problem. Reducing duplication and finding a good human computer interface with AI is great but if you just don't want to think at all, you'll just dump crap on the next guy and it's natural that you're "worried about being replaced by AI".
Also this was an afternoon project I did before I had a meeting just for fun
My points are valid though and if you want to argue them on their merits instead of throwing misguided and ignorant insults you're welcome to do so.
It's definitely _a_ commit message. Not sure it beats "asdasd" or "do stuff" though.
def generate_commit_message(self, diff):
"""
Generate a commit message using the Gemini API.
"""
prompt = f"Generate a concise and meaningful Git commit message for the following changes:\n\n{diff}"
response = self.model.generate_content(prompt)
return response.text.strip()
and diff is just output of `git diff`. No context or comprehension of repo or treesitter to share code structure ...OTOH, it's an open source base and one can PR to it.
It doesn’t know the intent of the commit though, so if you change X because of Y, it will just tell that X changed, without explaining why.
Adding more context about what the ticket is about can probably solve that
‘Updated file1.txt with new content.’
Huh?