“It never reimplements git — it shells out to the system git CLI and rebuilds commits with git commit-tree, reusing each commit's original tree so file contents are provably never changed.”
Glad the LLM noted this - I was worried this would reimplement git
For what it's worth, I've used Claude to write a lot of smaller utility tools that I wouldn't normally have the time to sit down and implement, but which also solve straightforward problems.
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'.
Ha ha fair. But yeah shelling out to git and reusing the original tree object was deliberate means file contents can't change even if I screw up elsewhere.
Reimplementing the good parts of git takes maybe 2-3 days with Claude. I did that, and I use it daily instead of legacy git. Commit, merge, push to GitHub, all the usual things. Zero issues in the past 3 months, absolutely boring.
P.S. I am a computer scientist and I specialize in this domain. I can reimplement git in many ways and styles and I have an opinion because I know what the options are. Thanks for the downvotes. Taken as a compliment.
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.
Yes, for instance it could be useful if someone’s been accidentally committing with a bogus email address. Or if you’re cleaning up some sort of mess and would like to recreate an accurate history.
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.
Yes. Absolutely! Many times I had a wrong configured terminal and messed up the author. Often I work in different projects, privately and in my work, and I use different authors for both
Please put up this or another screenshot as the first thing you see in the README - please!
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 :)
I built a small Tauri app that just shows your commits in a table and lets you edit message/author/date directly, plus find & replace with regex if you need to fix a bunch at once. It backs up the branch before it rewrites anything doesn't touch file contents, just metadata.
“It never reimplements git — it shells out to the system git CLI and rebuilds commits with git commit-tree, reusing each commit's original tree so file contents are provably never changed.”
Glad the LLM noted this - I was worried this would reimplement git
why can't anyone just do things themselves anymore? it's all LLM crap
For what it's worth, I've used Claude to write a lot of smaller utility tools that I wouldn't normally have the time to sit down and implement, but which also solve straightforward problems.
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'.
Ha ha fair. But yeah shelling out to git and reusing the original tree object was deliberate means file contents can't change even if I screw up elsewhere.
Why would you think such a project would reimplement git?
I believe that was sarcasm.
Reimplementing the good parts of git takes maybe 2-3 days with Claude. I did that, and I use it daily instead of legacy git. Commit, merge, push to GitHub, all the usual things. Zero issues in the past 3 months, absolutely boring.
Building the new things turned out to be a longer and way more interesting story. https://replicated.live/blog/click
P.S. I am a computer scientist and I specialize in this domain. I can reimplement git in many ways and styles and I have an opinion because I know what the options are. Thanks for the downvotes. Taken as a compliment.
This is cool, but has anyone ever needed to rewrite commit authors or dates?
I've needed to do this for a bunch of reasons.
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.
git-filter-repo is amazing for the second case. I've used it to split repos and rename folders multiple times.
Yeah, I wrote a TIL about that a few years ago: https://til.simonwillison.net/git/rewrite-repo-specific-file...
Yes, for instance it could be useful if someone’s been accidentally committing with a bogus email address. Or if you’re cleaning up some sort of mess and would like to recreate an accurate history.
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.
If someone's been committing with a bogus email address and they're still working on the project, shouldn't they clean up their own commits?
Yeah, using this tool for example?
Usually its me who has been committing with a bogus email address, because I don't like having my real user/email set in my $HOME/.gitconfig
Yes. Absolutely! Many times I had a wrong configured terminal and messed up the author. Often I work in different projects, privately and in my work, and I use different authors for both
yes; when i wanted to make it look like i didn’t procrastinate for a week and implement the entire feature in one day
Hmmm, this seems to be making easy something you normally should not do.
So, exactly like a knife? Generally we don't want to cut people open, but when we need to do it, like during surgery, a sharp knife sure helps.
that's it
Agreed mostly. The intent is local cleanup before you push like fixing a wrong author email across a batch or dates from a machine with a bad clock
Would be great to have this, but as a TUI tabular editor.
I would like to see something like this in magit. Other there is already?
No idea not an emacs person does magit handle bulk author/date edits or just reword? genuinely curious
This looks cool! Are there screenshots available?
https://imgur.com/a/V5EGCOw
Please put up this or another screenshot as the first thing you see in the README - please!
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 :)
done
Unreadable in iPad Safari -- delayed popup darkens the screen and demands app install.
I'd put that in the repo not here.
you're right, done
Extra points for the name.
Appreciate it! pick a commit, stab it
I built a small Tauri app that just shows your commits in a table and lets you edit message/author/date directly, plus find & replace with regex if you need to fix a bunch at once. It backs up the branch before it rewrites anything doesn't touch file contents, just metadata.