修改Git提交历史中的作者信息
2025/6/29...大约 1 分钟
修改Git提交历史中的作者信息
通过脚本批量修改Git提交历史中的作者姓名和邮箱:
curl -s https://www.geekery.cn/sh/LinuxCTS/tools/git_change_author.sh | bash
脚本源码
#!/bin/bash
# --------------------------------------------------------------------
# author: Paper-Dragon <[email protected]>
# date: 2025-06-26
# description: Change git log author name and email
# --------------------------------------------------------------------
# 交互式输入参数
read -rp "请输入原作者姓名: " OLD_NAME
read -rp "请输入修正后的作者姓名: " CORRECT_NAME
read -rp "请输入原作者邮箱: " OLD_EMAIL
read -rp "请输入修正后的邮箱: " CORRECT_EMAIL
# 参数校验
if [[ -z "$OLD_NAME" || -z "$CORRECT_NAME" || -z "$OLD_EMAIL" || -z "$CORRECT_EMAIL" ]]; then
echo "错误:所有参数都必须提供,不能为空!"
echo "请确保输入以下所有信息:"
echo " - 原作者姓名"
echo " - 修正后作者姓名"
echo " - 原作者邮箱"
echo " - 修正后邮箱"
exit 1
fi
export OLD_NAME="$OLD_NAME"
export CORRECT_NAME="$CORRECT_NAME"
export OLD_EMAIL="$OLD_EMAIL"
export CORRECT_EMAIL="$CORRECT_EMAIL"
git filter-branch --env-filter '
if [ "$GIT_COMMITTER_NAME" = "$OLD_NAME" ] || [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] || [ "$GIT_AUTHOR_NAME" = "$OLD_NAME" ] || [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]; then
if [ "$GIT_COMMITTER_NAME" = "$OLD_NAME" ]; then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
fi
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]; then
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_NAME" = "$OLD_NAME" ]; then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]; then
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
fi
' --tag-name-filter cat -- --branches --tags
echo "修改完成!请注意:" echo "1. 此操作会重写历史,已推送的仓库需要强制推送 (git push --force)" echo "2. 协作仓库需要通知其他成员重新克隆"
更新日志
2025/6/29 10:44
查看所有更新日志
f1db6
-于