【自用记录】修改GitHub提交历史作者

系上一篇后,还在被 GitHub 账号折腾,遂记录问题。

问题背景:之前本地关联过一个GitHub账号,每次git push都用这个原始账号。最近在做不同的项目作业,需要使用其他GitHub账号。

在进行了本地关联多个GitHub账号之后,发现明明跟原始账号无关的仓库,提交的commit还是原始GitHub账号,没有改变。

需求:1)改变项目的提交账号,即之后commit账号都是正确的;2)修改之前已提交commit的账号到正确的账号下。

GPT说这个需求是可行的,该操作叫重写 Git 历史

改完后,那些 commit 的内容、提交时间都不会变,但它们的 commit SHA 会变。

0. 一些前置操作

先确认当前分支:

bash 复制代码
git branch --show-current

留个备份,防止手滑:

bash 复制代码
git branch backup-before-author-fix

查看并确认当前 commit 作者信息:

bash 复制代码
git log --pretty=format:"%h | %an | %ae | %s" --max-count=30

1. 先设置以后新 commit 的账号

注意,这里不要加 --global

bash 复制代码
git config user.name "你的新GitHub用户名"
git config user.email "你的新GitHub邮箱"

确认是否修改成功:

bash 复制代码
git config --local user.name
git config --local user.email

2. 批量修改旧 commits 的作者

这一步建议用 Git Bash ,不要用 PowerShell,减少引号问题。

在项目文件夹里右键Open Git Bash here,输入以下命令:

bash 复制代码
git filter-branch --env-filter '
OLD_EMAIL="你的旧GitHub邮箱"
CORRECT_NAME="你的新GitHub用户名"
CORRECT_EMAIL="你的新GitHub邮箱"

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
' HEAD

这段命令的意思:当前分支历史里,凡是 author/committer email 等于原始旧邮箱的 commit,全部改成新账号信息。

检查是否改成功:

bash 复制代码
git log --pretty=format:"%h | %an | %ae | %s" --max-count=30

3. 强制更新远程分支

因为改了历史,普通 push 会失败:

bash 复制代码
git push --force-with-lease origin [当前分支名/main]

如果当前工作区还有写一半的代码,先 stash:

bash 复制代码
git stash push -u -m "temp unfinished work"

再做上面的作者修改。

改完并 push 后,再恢复:

bash 复制代码
git stash pop

参考教程来自ChatGPT

相关推荐
白鲸开源1 小时前
Apache SeaTunnel Zeta Engine 的 Basic Auth 是怎么工作的?
java·vue.js·github
白鲸开源1 小时前
一文读懂DolphinScheduler插件机制:如何轻松扩展任务类型与数据源
java·架构·github
沉浸学习的匿名网友2 小时前
什么是 .gitignore?为什么每个 Git 项目几乎都离不开它?
前端·git
徐小夕1 天前
万字拆解 JitWord:企业级实时协同文档底层架构 + 大模型 AI 融合完整实践
前端·vue.js·github
深海鱼在掘金1 天前
Git 完全指南 —— 第3章:理解工作区、暂存区、版本库三个核心
git
码流怪侠1 天前
【GitHub】Ponytail:给 AI 编码代理植入“懒人资深开发者“灵魂的开源插件深度拆解
程序员·github·ai编程
齐翊1 天前
怎么确认 AI 看懂了你的提示词?
人工智能·github·ai编程
江华森1 天前
Git 基础筑基:从原理到团队协作的全栈实战
git
JakeJiang1 天前
Git 必备命令指南:从日常高频到项目开发实战
git
李小庆1 天前
Sowork AI Agent 编程助手教程 :第一章 Python环境搭建与Sowork项目克隆学习目标
github