开发者生态
evening
Show HN:Git-knife – 像电子表格一样编辑提交消息、作者和日期
2026-08-11
1 阅读
约8分钟阅读
YonathanTesfaye
字号:
git-knife 🔪 将您的 git 历史记录成型 — 每个提交的消息、作者和日期,像表格一样进行编辑。一个干净的桌面 GUI,用于直接编辑 git 提交元数据 - 消息、作者日期、提交者日期、作者姓名/电子邮件。现有的 GUI(GitKraken、Sublime Merge、Fork、lazygit)可以很好地重写和重新排序,但将提交日期视为有效不可变,并且不会公开任意提交的提交者日期/作者身份。可以重写元数据的工具( git-filter-repo 、 git rebase env 技巧、 git commit-tree )没有 GUI。 git-knife 填补了这个空白。它永远不会重新实现 git —— 它会使用 git CLI 系统并使用 git commit-tree 重建提交,重用每个提交的原始树,因此文件内容可以证明永远不会改变。比较方式 Tool Clean GUI Reword msg 重新排序/挤压/删除 编辑作者日期 编辑提交者日期 编辑作者/电子邮件 批量查找和替换(正则表达式) git-knife ✅ ✅ 🚧 计划 ✅ ✅ ✅ ✅ GitKraken ✅ ✅ ✅ ⚠️ 仅修改 ❌ ⚠️ ❌ Sublime Merge ✅ ✅ ✅ ❌ ❌ ⚠️修改 ❌ Fork ✅ ✅ ✅ ❌ ❌ ⚠️ ❌ SmartGit ✅ ✅ ✅ ⚠️ ❌ ✅ ❌ git-cola ◐ ✅ ✅ ✅ ❌ ✅ ❌lazygit (TUI) ◐ TUI ✅ ✅ ❌ ❌ ⚠️ ❌ git-filter-repo (CLI) ❌ ✅ 通过回调 ✅ ✅ ✅ ✅ 图例: ✅ 一流 · ⚠️ 可能但尴尬/有限 · ◐ 过时的或终端 UI · ❌ 不支持 · 🚧 计划中。完善的 GUI 可以很好地重新措辞和重新排序,但将提交日期(尤其是提交者日期)视为实际上不可变的,并且没有一个提供批量正则表达式传递作者身份。可以重写元数据的工具没有 GUI。 git-knife 是交集:一个干净的 GUI,可以安全地批量编辑每个字段。状态(MVP) ✅ 打开一个存储库,列出当前分支上的提交 ✅ 编辑消息/作者姓名+电子邮件/作者日期/提交者日期/提交者姓名+电子邮件 ✅ 在这些文本字段、文字或正则表达式中批量查找和替换(非常适合修复各处错误的电子邮件) ✅ 在应用之前预览每个更改 ✅ 每次重写之前自动备份引用 + 一键恢复 ✅ 当重写触及已推送的历史记录时发出警告 ✅ 合并提交被锁定(不是在此版本中可编辑)⛔ 尚未:重新排序/压缩/删除、合并重写、暂存/分支/远程要求 git (2.x) Node.js + pnpm ( corepack enable pnpm , 或 npm i -g pnpm ) Rust (稳定) — 通过 https://rustup.rs 安装 Tauri v2 的 Linux 系统 deps: webkit2gtk-4.1 , libgtk-3 , libayatana-appindicator3 、 librsvg2 (Debian/Ubuntu: sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev ) 运行 (dev) pnpm install pnpm tauri dev 第一个货物构建下载并编译 Tauri 箱子(几分钟)。构建捆绑包 pnpm tauri build 打包 ( tauri build ) 需要应用程序图标。它们已经在 src-tauri/icons/ 下提交;使用 pnpm tauri 图标 path/to/icon.png 从任何方形 PNG 重新生成。开发运行不需要它们。自动发布(GitHub Actions) .github/workflows/release.yml 使用 tauri-action 为 macOS、Linux 和 Windows 构建本机安装程序,并将其附加到 GitHub 发布草案。通过推送标签来剪切版本: git tag v0.1.0 git push origin v0.1.0 (或从存储库的“操作”选项卡手动触发它)。尚未设置代码签名,因此 macOS/Windows 构建未签名 - 对于早期测试人员来说很好。编辑历史记录并推送 编辑提交 打开存储库(浏览...或粘贴路径)。单击任何非合并提交以展开其编辑器。更改消息、作者/提交者姓名、电子邮件或日期。编辑的行突出显示;日期字段保留提交的原始 UTC 偏移量。点击查看并应用,检查旧→新预览,然后确认。 git-knife 仅重写您的本地分支。它永远不会接触遥控器,也不会为你推送——推送始终是你明确的步骤。批量查找和替换 单击提交表上方的批量查找和替换可一次更改多个提交中的文本:选择要定位的字段(消息、作者/提交者姓名、作者/提交者电子邮件 - 任意组合)。输入查找/替换。切换正则表达式以与 $1 反向引用进行模式匹配,或将其关闭以进行文字搜索。默认情况下区分大小写。该面板实时计数匹配的提交和替换。单击阶段编辑将其变成突出显示的行,然后照常查看并应用。示例 - 将每个提交从旧电子邮件移动到新电子邮件:目标 作者电子邮件 + 提交者电子邮件 ,找到 old@example.com ,替换 new@example.com 。合并提交将被跳过,并且连续的传递将被组合。推送重写编辑提交会更改其哈希值以及之后每个提交的哈希值,因此您的本地分支和远程分支出现了分歧。正常的 git 推送会因为非快进而被拒绝。使用租约推送: git push --force-with-lease origin --force-with-lease 如果远程在上次获取后移动,则拒绝推送,因此您不能默默地破坏队友的提交。更喜欢它而不是简单的 --force ,它会跳过安全检查。当您的编辑到达 com 时,git-knife 显示“重写推送历史记录”警告
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱