在日常开发中,我们难免会遇到需要修改 Git 历史提交记录的场景:提交信息写错了、邮箱配置错误导致提交人信息不准确、或者需要合并多个提交。本文提供两份“比细狗还细”的实践步骤,手把手教你如何通过 git rebase -i 和 git filter-branch 两种方式,分别实现批量修改历史提交信息和批量修改历史提交人。
参考文章:Git 修改历史提交记录
太细了,比细狗还细。不推荐使用
bash# 从第一个提交开始
git rebase -i --root
# 或者:从最近N次提交开始
git rebase -i HEAD~3
# 把pick改成edit
:%s/^pick/edit/g
# 保存并退出
:wq!
# 输入命令(首次)
git commit --amend
# 修改提交信息,然后退出编辑器,运行以下命令继续下一个
git rebase --continue && git commit --amend
需要在仓库根目录使用,以命令行的方式使用,而不是脚本文件的方式
bash# 批量修改提交人(OLD_EMAIL用于定位历史提交记录)
git filter-branch --env-filter '
OLD_EMAIL="tianjunold@odboy.cn"
CORRECT_NAME="Odboy"
CORRECT_EMAIL="tianjun@odboy.cn"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
# 覆盖远程提交记录
git push --force


本文作者:Odboy
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC 4.0 BY-SA 许可协议。转载请注明出处!