<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/github---therealyt-git-knife-cpeqvjktf" -->

---
title: GitHub - TheRealYT/git-knife | daily.dev
description: git-knife is a desktop GUI tool built with Tauri (Rust + Node.js) that fills a gap in existing git clients: editing commit metadata — message, author...
canonical: https://daily.dev/posts/github---therealyt-git-knife-cpeqvjktf
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: GitHub - TheRealYT/git-knife | daily.dev
og:description: git-knife is a desktop GUI tool built with Tauri (Rust + Node.js) that fills a gap in existing git clients: editing commit metadata — message, author...
og:url: https://daily.dev/posts/github---therealyt-git-knife-cpeqvjktf
og:image: https://api.daily.dev/og/posts/CpeqvJkTf.png
og:image:alt: GitHub - TheRealYT/git-knife
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# GitHub - TheRealYT/git-knife

**[Hacker News](https://daily.dev/sources/hn)** · 7 min read · 1 upvotes · 0 comments

## Summary

git-knife is a desktop GUI tool built with Tauri (Rust + Node.js) that fills a gap in existing git clients: editing commit metadata — message, author name/email, author date, and committer date — for any commit, not just the latest. It supports bulk find-and-replace with regex across multiple commits, previews changes before applying, and creates automatic backup refs before each rewrite. Unlike polished GUIs (GitKraken, Sublime Merge, Fork) that treat commit dates as immutable, or CLI tools like git-filter-repo that lack a GUI, git-knife combines both. It shells out to the system git CLI and uses git commit-tree to rebuild commits without touching file contents. Safety features include backup refs, a one-click restore panel, and warnings when rewrites affect already-pushed history.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://github.com/TheRealYT/git-knife>

## Questions this post answers

### How do I edit the committer date or author email of an existing git commit using a GUI?

git-knife is a desktop GUI built with Tauri and Rust that lets you edit a commit's message, author name/email, author date, and committer date directly, then rebuilds the commit chain using git commit-tree so the original file contents never change. It shells out to the system git CLI rather than reimplementing git, and supports bulk regex find-and-replace across these fields for multiple commits at once.

_daily.dev surfaces tools like this for developers who need to clean up commit history without CLI gymnastics._

### Why does git push get rejected after rewriting commit history, and how do I push safely?

Rewriting a commit changes its hash and every subsequent commit's hash, so the local branch diverges from the remote and a normal git push is rejected as non-fast-forward. Use git push --force-with-lease origin <branch> instead of plain --force, since it refuses to push if the remote moved since your last fetch, preventing you from silently overwriting a teammate's commits.

_developers rewriting shared git history can track safe force-push practices via daily.dev._

### How can teammates recover after someone force-pushes a rewritten git history?

Anyone who already pulled the old commits has divergent history and must re-sync by running git fetch origin followed by git reset --hard origin/<branch>, which discards their local-only commits, so coordination beforehand is essential. If the rewrite needs to be undone entirely, backup refs (like refs/knife-backup) or git reflog can restore the pre-rewrite tip locally before force-pushing again.

_teams coordinating around rewritten git history can find recovery workflows like this through daily.dev._

## Community take

How the wider developer community reacted, aggregated from 2 discussions and 86 comments across hackernews (as of 2026-09-14).

**TL;DR:** The community finds git-knife a genuinely useful niche tool for editing commit metadata, though discussion quickly pivots to debating LLM-assisted development, the ethics of rewriting history, and screenshot quality. Most agree the use case is real but narrow.

**Sentiment:** 45% positive · 35% mixed · 20% skeptical

**The case for**

- Shelling out to the system git CLI and reusing the original tree object means file contents provably cannot change during rewrites.
- Automatic backup refs and a one-click restore panel make the dangerous operation safer.
- Fills a real gap: fixing wrong author emails, bad clock dates, or misattributed commits is a legitimate need that existing GUIs don't support.
- The bulk find-and-replace with regex across multiple commits saves significant manual effort for batch fixes.

**The pushback**

- The screenshot appears to be a photo of a monitor (or at least looks like one due to window transparency), which undermines confidence in the project's polish.
- Rewriting pushed history is dangerous, and making it easy via a GUI lowers the barrier to misuse.
- LLM-generated README prose is noticeable and off-putting to some readers.
- Will not work on repos using signed commits from multiple authors, limiting applicability in security-conscious workflows.
- A TUI or simple shell script could cover most use cases without the Tauri/desktop app overhead.

**By community**

- hackernews (mixed): Broadly receptive to the tool's niche utility — with real use cases shared by multiple commenters — but the thread is dominated by a side debate about LLM-assisted development and LLM-generated documentation, plus minor friction over the screenshot quality.

**Hottest debate:** Whether using LLMs to write code and documentation for small utility tools represents acceptable productivity leverage or a lazy shortcut that degrades the quality of shared artifacts.

**Open questions**

- Does magit or any existing Emacs tooling already support bulk author/date edits?
- Would a TUI version be more appropriate given the tool's lightweight scope?
- How should the tool handle repos with GPG/SSH signed commits where history is intentionally immutable?

**Highlights**

> 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.
> — [simonw on hackernews · 1 comments](https://news.ycombinator.com/item?id=49260617)

> Note: This will not work and cannot work on repos that use signed commits from multiple authors. 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
> — [lrvick on hackernews](https://news.ycombinator.com/item?id=49264485)

> 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'.
> — [danudey on hackernews · 1 comments](https://news.ycombinator.com/item?id=49260984)

> One of the most annoying quirks of LLMs for me is the insistence on, after being corrected, loudly noting what wasn't done. After getting it to change something stupid in code, it will leave a comment in the code boasting about how it doesn't do the stupid thing, which to future readers reads like an 'asbestos free!' label on a cereal box.
> — [rozab on hackernews · 3 comments](https://news.ycombinator.com/item?id=49262338)

> Looking at the metadata it says it is a Gnome screenshot. What a pointless and incorrect non-sequitor.   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.3
> — [skinfaxi on hackernews · 1 comments](https://news.ycombinator.com/item?id=49263963)

**Source threads**

- [hackernews](https://news.ycombinator.com/item?id=49259611) · 114 points · 86 comments
- [hackernews](https://news.ycombinator.com/item?id=49249446) · 2 points · 0 comments

## Similar posts on daily.dev

- [The \(lazy\) Git UI You Didn't Know You Need](https://daily.dev/posts/the-lazy-git-ui-you-didn-t-know-you-need-4agjkdwig) · Hacker News · 479 upvotes · 24 comments
- [GitRoot](https://daily.dev/posts/gitroot-vrvvjquf5) · Lobsters · 0 upvotes · 0 comments
- [Highlights from Git 2.52](https://daily.dev/posts/highlights-from-git-2-52-4qkhhmx3p) · GitHub Blog · 98 upvotes · 1 comments
- [Gitte As Git Client For GNOME Continues Maturing Quite Nicely](https://daily.dev/posts/gitte-as-git-client-for-gnome-continues-maturing-quite-nicely-ckbfgnbts) · Phoronix · 0 upvotes · 0 comments

---

Tags: [#typescript](https://daily.dev/tags/typescript), [#rust](https://daily.dev/tags/rust), [#git](https://daily.dev/tags/git)

[View this post on daily.dev](https://daily.dev/posts/github---therealyt-git-knife-cpeqvjktf)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"GitHub - TheRealYT/git-knife","url":"https://daily.dev/posts/github---therealyt-git-knife-cpeqvjktf","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/github---therealyt-git-knife-cpeqvjktf"},"datePublished":"2026-08-11T15:56:32.880Z","dateModified":"2026-09-14T07:42:13.349Z","description":"git-knife is a desktop GUI tool built with Tauri (Rust + Node.js) that fills a gap in existing git clients: editing commit metadata — message, author...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/589173fdd0d11e5aca4cc249ce9a539b?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/589173fdd0d11e5aca4cc249ce9a539b?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/github---therealyt-git-knife-cpeqvjktf","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"typescript,rust,git","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"GitHub - TheRealYT/git-knife"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/github---therealyt-git-knife-cpeqvjktf#faq","mainEntity":[{"@type":"Question","name":"How do I edit the committer date or author email of an existing git commit using a GUI?","acceptedAnswer":{"@type":"Answer","text":"git-knife is a desktop GUI built with Tauri and Rust that lets you edit a commit's message, author name/email, author date, and committer date directly, then rebuilds the commit chain using git commit-tree so the original file contents never change. It shells out to the system git CLI rather than reimplementing git, and supports bulk regex find-and-replace across these fields for multiple commits at once. daily.dev surfaces tools like this for developers who need to clean up commit history without CLI gymnastics."}},{"@type":"Question","name":"Why does git push get rejected after rewriting commit history, and how do I push safely?","acceptedAnswer":{"@type":"Answer","text":"Rewriting a commit changes its hash and every subsequent commit's hash, so the local branch diverges from the remote and a normal git push is rejected as non-fast-forward. Use git push --force-with-lease origin <branch> instead of plain --force, since it refuses to push if the remote moved since your last fetch, preventing you from silently overwriting a teammate's commits. developers rewriting shared git history can track safe force-push practices via daily.dev."}},{"@type":"Question","name":"How can teammates recover after someone force-pushes a rewritten git history?","acceptedAnswer":{"@type":"Answer","text":"Anyone who already pulled the old commits has divergent history and must re-sync by running git fetch origin followed by git reset --hard origin/<branch>, which discards their local-only commits, so coordination beforehand is essential. If the rewrite needs to be undone entirely, backup refs (like refs/knife-backup) or git reflog can restore the pre-rewrite tip locally before force-pushing again. teams coordinating around rewritten git history can find recovery workflows like this through daily.dev."}}]}
```

