展示 HN: Git-knife – 像电子表格一样编辑提交信息、作者和日期
让你的 git 历史井然有序——每个提交的消息、作者和日期,像表格一样编辑。一个干净的桌面 GUI,直接编辑 git 提交元数据——消息、作者日期、提交日期、作者姓名/邮箱。现有的 GUI(GitKraken、Sublime Merge、Fork、lazygit)对文本进行良好的修订和重排序,但将提交日期视为有效不可变,并且不公开任意提交的提交者日期/作者身份。可以重写该元数据的工具(git-filter-repo、git rebase env tricks、git commit-tree)没有任何 GUI。git-knife 填补了这一空白。它从未重新实现 git——它调用系统 git CLI,并通过 git commit-tree 重建提交,重新使用每个提交的原始树,使文件内容证明上从未更改。它的比较工具 干净 GUI 重新措辞消息 重排序 / 压缩 / 删除 编辑作者日期 编辑提交者日期 编辑作者/邮箱 批量查找和替换(正则表达式) 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 安装 Linux 系统依赖项:Tauri v2: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) 运行(开发) pnpm install pnpm tauri dev 第一次 cargo 构建下载并编译 Tauri crates(几分钟)。 打包一个捆绑 pnpm tauri build 打包( tauri build)需要应用图标。它们已经在 src-tauri/icons/ 中提交;从任何方形 PNG 重新生成,使用 pnpm tauri icon path/to/icon.png。开发运行不需要它们。 自动化发布(GitHub Actions) .github/workflows/release.yml 为 macOS、Linux 和 Windows 构建本机安装程序,使用 tauri-action 并将其附加到草稿 GitHub 发布。通过推送标签进行发布:git tag v0.1.0 git push origin v0.1.0(或从仓库的操作选项卡手动触发)。尚未设置代码签名,因此 macOS/Windows 构建未签名——对于早期测试者来说挺好。 编辑历史和推送 编辑提交 打开一个仓库(浏览…或粘贴路径)。单击任何非合并提交以展开其编辑器。更改消息、作者/提交者姓名、邮箱或日期。编辑的行会高亮显示;日期字段保留原始的 UTC 偏移。单击“审核并应用”,检查旧 → 新的预览,然后确认。git-knife 只重写您的本地分支。它从不联系远程,并且从不为您推送——推送始终是您的明确步骤。 批量查找和替换 单击提交表上方的“批量查找和替换”以一次更改许多提交中的文本:选择要针对的字段(消息、作者/提交者姓名、作者/提交者邮箱——任意组合)。输入查找/替换。切换正则表达式以进行模式匹配,或关闭以进行字面搜索。默认情况下区分大小写。面板实时计算匹配的提交和替换。单击“暂存编辑”将其转变为高亮行,然后按照正常方法审核并应用。 示例——将每个提交从旧邮箱移动到新邮箱:目标作者邮箱 + 提交者邮箱,查找 old@example.com,替换为 new@example.com。合并提交被跳过,连续通行组合。 推送重写 编辑提交将更改其哈希值,以及其后每个提交的哈希值,因此您的本地分支和远程分支发生了分歧。普通 git push 被拒绝为非快进。使用租约推送:git push --force-with-lease origin < branch >--force-with-lease 如果自上次提取以来,远程已移动,则拒绝推送,因此您不能静默覆盖队友的提交。尽量使用它,而不是普通的 --force ,后者跳过安全检查。 当您的编辑触及已推送的历史时,git-knife 会显示“重写已推送历史”的警告。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡