前两天发现有个项目的 git 邮箱写错了,趁今天稍微空些准备祭出祖传的脚本进行修改,谁知出现提示: “git-filter-branch has a glut of gotchas generating mangled history rewrites. Hit Ctrl-C before proceeding to abort, then use an alternative filtering tool such as git filter-repo instead.”。既然有新的命令(方式)自然要尝试一般。
介绍
是一个使用 Python 编写,用于过滤和转换 Git 存储库历史记录的工具。可以对提交记录进行各种操作,如删除、重写提交历史、拆分存储库等。
安装
macOS 可以通过 Homebrew 安装:
或是使用 pip 安装:
当然也可以直接从仓库下载源文件运行,安装的好处是可以结合到 git 命令中使用。
使用
这里主要是对历史提交的邮箱信息进行修改:
另一种方式支持同时修改邮箱和姓名 (多个):
对应 mailmap 文件内容:
注:
- —mailmap 中 <> 符号是必须的
- —email-callback 和 —mailmap 两种方式的邮箱顺序不一样
修改完成后 push 如果出现: “fatal: No configured push destination” 提示,需要先重新设置远程仓库:
问题
在本机修改并 push 后,在服务器上执行 pull 时提示:
尝试加 -f 和按提示操作之后也没办法解决,索性直接把 .git 目录删除,重新 clone 后拷贝过来后,提交记录总算一致。
信息
环境
- Python 3.10.10
- GitHub 2.39.2
- git-filter-repo 2.38.0
- System: macOS 13.4.1