git-knife: un escritorio para reescribir la fecha, el autor y el mensaje de cada commit

Fuentes: git-knife: a desktop GUI for rewriting commit metadata the existing Git GUIs won't touch

git-knife es una aplicación de escritorio que cubre un hueco concreto del ecosistema git: editar, desde una interfaz gráfica limpia, los metadatos de los commits —mensaje, nombre y correo del autor, y fechas de autoría y de commit— sin alterar el contenido de los ficheros. Está construida con Tauri (Rust + Node.js) y, en lugar de reimplementar git, delega en el binario git del sistema: reconstruye la cadena de commits con git commit-tree reutilizando el árbol original de cada uno, lo que garantiza que los archivos no cambian.

El proyecto parte de una observación precisa: las GUI populares (GitKraken, Sublime Merge, Fork, SmartGit, lazygit) permiten reformular mensajes y reordinar commits, pero tratan las fechas —sobre todo la committer date— como inmutables y ninguna expone una pasada masiva en regex sobre la identidad del autor. Las herramientas capaces de reescribir esa metadata (git-filter-repo, git commit-tree, trucos de rebase con variables de entorno) carecen de interfaz gráfica. git-knife se sitúa en la intersección: edición campo a campo y en lote, con vista previa antes de aplicar.

Funcionalidades disponibles: apertura de un repositorio y listado de la rama actual; edición individual de mensaje, autor, committer y fechas; búsqueda y reemplazo masivo (literal o regex) sobre los campos textuales, útil, por ejemplo, para migrar de un correo antiguo a uno nuevo; vista previa de cada cambio; copia de seguridad automática en refs/knife-backup/* antes de cada reescritura, con restauración en un clic; aviso cuando la edición toca historia ya empujada al remoto; commits de fusión bloqueados en esta versión. Quedan fuera: reordenar, aplastar o descartar commits, fusión, staging y manejo de ramas y remotos.

Como toda reescritura de historia, git-knife cambia el hash del commit editado y de todos sus descendientes. El empuje al remoto requiere --force-with-lease (recomendado sobre --force) y obliga al resto del equipo a re-sincronizar con fetch y reset --hard. La aplicación no contacta con remotos ni empuja por sí misma: el empujón siempre lo decide el usuario.

El repositorio incluye workflows de GitHub Actions con tauri-action que generan instaladores nativos para macOS, Linux y Windows; aún sin firma de código. Traza una nota discreta refs/notes/git-knife en los commits reescritos, totalmente descubrible y eliminable, para indicar qué puntas fueron modificadas por la herramienta.