#!/bin/bash # 修复 Git 提交记录中的邮箱地址 # 将 noreply@gitee.com 替换为已注册的邮箱 echo "==========================================" echo "修复 Git 提交记录中的邮箱地址" echo "==========================================" echo "" # 检查是否在 Git 仓库中 if [ ! -d .git ]; then echo "❌ 错误:当前目录不是 Git 仓库" exit 1 fi # 检查是否有未提交的更改 if [ -n "$(git status --porcelain)" ]; then echo "⚠️ 警告:检测到未提交的更改" echo "建议先提交或暂存更改后再执行此脚本" read -p "是否继续?(y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi # 配置信息 OLD_EMAIL="noreply@gitee.com" CORRECT_NAME="renjianbo" CORRECT_EMAIL="263303411@qq.com" echo "将修改以下邮箱地址:" echo " 旧邮箱: $OLD_EMAIL" echo " 新邮箱: $CORRECT_EMAIL" echo " 作者名: $CORRECT_NAME" echo "" # 检查是否有使用旧邮箱的提交 COMMITS_WITH_OLD_EMAIL=$(git log --format='%H' --author="$OLD_EMAIL" | wc -l) if [ "$COMMITS_WITH_OLD_EMAIL" -eq 0 ]; then echo "✅ 没有找到使用 $OLD_EMAIL 的提交,无需修改" exit 0 fi echo "找到 $COMMITS_WITH_OLD_EMAIL 个使用旧邮箱的提交" echo "" # 创建备份分支 BACKUP_BRANCH="backup-$(date +%Y%m%d-%H%M%S)" echo "创建备份分支: $BACKUP_BRANCH" git branch "$BACKUP_BRANCH" echo "✅ 备份完成" echo "" # 执行批量修改 echo "开始批量修改提交记录..." echo "这可能需要一些时间,请耐心等待..." echo "" git filter-branch -f --env-filter " 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 if [ $? -eq 0 ]; then echo "" echo "✅ 修改完成!" echo "" echo "验证结果:" REMAINING=$(git log --format='%H' --author="$OLD_EMAIL" | wc -l) if [ "$REMAINING" -eq 0 ]; then echo "✅ 所有提交的邮箱地址已成功修改" else echo "⚠️ 仍有 $REMAINING 个提交使用旧邮箱" fi echo "" echo "下一步:" echo " 1. 检查修改结果:git log --format='%an <%ae>' | head -10" echo " 2. 推送到 Gerrit:git push gerrit HEAD:refs/for/master" echo "" echo "如果需要恢复,可以使用:" echo " git reset --hard $BACKUP_BRANCH" else echo "" echo "❌ 修改失败" echo "可以恢复备份:git reset --hard $BACKUP_BRANCH" exit 1 fi