Show HN: Git-knife – Edit commit messages, authors, and dates like a spreadsheet
github.com
github.com
Glad the LLM noted this - I was worried this would reimplement git
One small example is an extension for the `gh` cli where I give it a PR number and multiple branches and it cherry-picks that PR to those branches, or lets me know if some of the branches don't work. For managing multiple release branches it's very handy, but not so handy that I would have spent a lot of time and energy doing a good job of it.
This seems like a similar sort of thing - a user friendly way to do something that most people don't need, and most people who need it probably don't need it very badly.
I haven't used claude to replace my actual skills - researching, solving problems, etc. - but I do use it to replace all the stuff which is essentially 'spend a few hours reading API docs and writing boilerplate code'.
Effective and clear communication is really important and often really hard for engineers. It is said that one goal of stackoverflow was to help programmers learn how to write through practice, as it’s both very hard and very critical to their effectiveness:
https://blog.codinghorror.com/how-to-write-without-writing/
But programmers are also lazy*, so why put in the effort to improve when you can just get llms to do the work for you?
* not necessarily in a bad way
like you said, niche and probably unnecessary. and if i were to have published them (even in a gist!) i would have written the docs myself instead of forcing people to read LLM-speak. That's just lazy.
Claude is learned (taught? lol) helplessness, at scale. I'm pretty sure it's their real moat.
Claude somehow wrote a bespoke one-off Python script to play back the songs straight out of the ROM. I give it the ROM and a hexadecimal address and it just plays it. Converts the data from the ROM into PCM audio samples and pipes them over SSH into termux on my phone where they are played back via SoX play.
Yes, Claude wrote a literal sound synthesizer so I could do this. Claude painstakingly tuned the goddamn synthesizer too, he tweaked it over and over again until the output sounded right based on annoyingly human feedback like "these notes are supposed to be in the background but they are too loud".
This tool turned a painstaking reverse engineering task into a nostalgic listening experience that brought literal tears to my eyes. I mapped out every single song in the game this way.
Without LLMs, none of this would ever have happened.
That would have been better for the world.
You can already expose the commit object as the headers (metadata) and the commit message. That’s like a spreadsheet: change these columns and we will make a new commit. That changed format can then be persisted as a commit object. So.
> A tool like this never sees the light of day without an LLM.
Are LLMs memory holing all the numerous tools built around Git (with git(1) or without)? There was already a query-Git-like-SQL tool before The Age of LLMs. I never tried that, but was that simpler to implement than this tool? Edit: Okay, maybe it wasn’t “niche” so that’s the differentiator.
And yet here we are. I have to read LLM design docs that turn into LLM PRs with LLM PR descriptions and comments and docs.
In what world are AI generated comments actually value adds?
This indeed pollutes the code with a bunch of nonsense. One of the things I have it maintain instead is a "findings" document with lessons learned and such.
In my experience the comments behave as a form of prompt injection. The llm makes a conceptual mistake, writes it in a comment, and now subsequent agents make the same mistake!
I imagine this style of commenting is partially responsible for model improvement in SWE work, a trained trait through feedback, since it makes the comments actually useful. Not to you or me, but to an LLM.
Some of these errors are obvious to a human, that's why we find the comments unnecessary. But if everyone's using LLMs and said model tends to make this error, then they are very useful. It's like a comment you would leave for another human to help them avoid a footgun. It's just a LLM footgun, not a human one.
One way to clear some of the low-hanging slop is to just have a separate agent code reviewing and pruning any comments that don't stand on their own purely in the context of the diff, but it still doesn't catch it all.
Signed git history is immutable, and unsigned git history is a supply chain attack vector.
That said I could see this being useful for single-author WIP branches doing cleanup before a PR
If you have more than one author in the history though that won't work, but I imagine where this is used the most is by an author cleaning up their own PRs.
Appreciate being heard on this sort of thing! Will take a closer look.
Obviously as with any “force push” situation, the usual caveats apply if this is on a branch others have checked out, but if the mess is big enough, it is sometimes worth it to send everyone a script to reset or just to have people delete and re-check-out.
1. Sometimes I do a scraping project where I want the commit dates to match when the data actually changed, reconstructed from sources like the Internet Archive or the dates on https://platform.claude.com/docs/en/release-notes/system-pro... - for example here: https://github.com/simonw/research/commits/main/extract-syst... - or this project that attempted to reconstruct the history of Tim Berners-Lee's original browser: https://github.com/simonw/1991-WWW-NeXT-Implementation/commi...
2. Sometimes I split a Git repo into two, and I want to preserve the commit history (authors and dates) on the files that end up in the new repo - effectively replay the history of just one folder from the original to help create the new one.
3. I occasionally mess up cleaning up and merging a PR from an open source contributor such that the work is incorrectly credited to me. I'll fix the commit so that it credits the right person.
- An agent messed with my git config for some reason so I had to go back and fix the commit authorship
- I created a PR mostly based on work that someone else did, so I reauthored most of the commits to be in their name
I have never personally needed to touch dates.I have script somewhere I think it's called git-cherry-replace, which soft resets a commit id and copies the commit message and optionally populates GIT_COMMITTER_DATE and whatnot.
What I described is probably simple enough that an LLM can implement it.
But unless you're trying to retroactively reconstruct something to preserve the exact meaning, you should consider whether a rebase even makes sense.
Take laws for example. Legalize[1] is a project that documents all laws into a git structure where each distinct change is a commit with the proper timestamp of tha change. Sure, this specific project builds that entire git history once and it's unlikely a retroactive change required such edits. But do something like this for historical sources where information is still coming in, and you might need to change a date when new findings occur.
Yes. Plenty of times.
exiftool -a -u -g1 ~/Downloads/screenshot.png
---- ExifTool ----
ExifTool Version Number : 13.55
---- System ----
File Name : screenshot.png
Directory : XXX
File Size : 1260 kB
File Modification Date/Time : 2026:08:11 16:24:37-04:00
File Access Date/Time : 2026:08:11 16:24:41-04:00
File Inode Change Date/Time : 2026:08:11 16:24:41-04:00
File Permissions : -rw-r--r--
---- File ----
File Type : PNG
File Type Extension : png
MIME Type : image/png
---- PNG ----
Image Width : 2351
Image Height : 1388
Bit Depth : 8
Color Type : RGB with Alpha
Compression : Deflate/Inflate
Filter : Adaptive
Interlace : Noninterlaced
Significant Bits : 8 8 8 8
Software : gnome-screenshot
Creation Time : Mon 10 Aug 2026 10:19:53 PM +03
---- Composite ----
Image Size : 2351x1388
Megapixels : 3.3Haven't seen mentioned, but you might want to check out https://github.com/mystor/git-revise
Git rebase -i is not that scary 119 points, 16 days ago, 151 comments https://news.ycombinator.com/item?id=49053385 https://cachebag.sh/journal/interactive-rebasing/
Staging patches with git add 34 points, 12 days ago, 52 comments https://news.ycombinator.com/item?id=49048570 https://cachebag.sh/journal/interactive-rebasing/
Really enjoying jj these days but the git rebase -i spreadsheet remains such a winner. Expanding it more, leaning in, ftw.
I'm reluctant to clone a repository and spend time on it just to find out the project looks crap and I don't want to use it. A screenshot saves other people's time :)
Regardless, it’s better than nothing, thank you.
- i should be able to change order of commits
- i should be able to change what files went in a previous commit