已经 push 到远程仓库的提交,如何修改某个用户的所有提交的邮箱啊

2025 年 10 月 31 日
 lixyz

新换了老板,查看报表时候,发现我以往的 commit 邮箱不是公司邮箱

我也比较纳闷。。。我记得我还专门设置过,排查下来,可能是 git 工具把我登录的账号默认的 git 配置给覆盖了

现在问题来了,该如何把已经 push 到远程仓库的所有有关我的 commit 的邮箱全部修改啊

求教大佬

4204 次点击
所在节点    git
16 条回复
maichael
2025 年 10 月 31 日
git-filter-repo 之类的工具,具体用法你问 AI 就好,不过肯定是要 force push 的,谨慎操作。
dif
2025 年 10 月 31 日
git filter-branch 试试

小声 bb ,不都看你需求单和缺陷工单么?怎么会看提交呢- - 我这修改一个小功能提交一次,那不得预定优秀员工?
lixyz
2025 年 10 月 31 日
@maichael force push 是肯定的,已经有心理预期了,很苦恼
@dif 可说呢。。。报表统计代码行数。。。

我试一下二位说的,先拿个测试仓库测试一下子,多谢多谢
victimsss
2025 年 10 月 31 日
commit hash 包括提交者信息和时间吧 你用工具修改了邮箱 之前的 commit hash 也会重写 对整个仓库的提交者都有影响
skiy
2025 年 10 月 31 日
# 修改 author 信息
git filter-repo --commit-callback '
if commit.author_email == b"old.email@example.com":
commit.author_name = b"New Name"
commit.author_email = b"new.email@example.com"
' --force

# 修改 committer 信息
git filter-repo --commit-callback '
if commit.committer_email == b"old.email@example.com":
commit.committer_name= b"New Name"
commit.committer_email = b"new.email@example.com"
' --force

# 修改全部
git filter-repo --force --commit-callback '
if commit.committer_email == b"old.email@example.com":
commit.author_name = b"New Name"
commit.author_email = b"new.email@example.com"
commit.committer_name = b"New Name"
commit.committer_email = b"new.email@example.com"
'

git filter-repo --force --commit-callback '
if commit.committer_email != b"new@example.com":
commit.author_name = b"New Name"
commit.author_email = b"new@example.com"
commit.committer_name = b"New Name"
commit.committer_email = b"new@example.com"
'

git filter-repo --force --commit-callback '
commit.author_name = b"New Name"
commit.author_email = b"new@example.com"
commit.committer_name = b"New Name"
commit.committer_email = b"new@example.com"
'

filter-repo 这个工具,能保持历史时间不变。还有一种是不用任何扩展也能改,但那个时间会切换成当前时间。
icyalala
2025 年 10 月 31 日
如果只是为了统计代码行数,那分邮箱统计出来后,再按单用户多邮箱合并一下不就行了
为什么要去改 git 历史呢。。。
lixyz
2025 年 10 月 31 日
@icyalala 可能是公司的统计工具,只支持公司内部邮箱吧,反正现在领导反馈能改的话最好改一下。。。无奈。。。
mach9452
2025 年 10 月 31 日
学会拒绝
awsl2333
2025 年 10 月 31 日
只能 rebase + push -f 了
svon
2025 年 10 月 31 日
git filter-branch -f --env-filter '
OLD_EMAIL="旧邮箱地址"
CORRECT_NAME="新名称"
CORRECT_EMAIL="新邮箱"
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
wenrouxiaozhu
2025 年 10 月 31 日
还有注意`GIT_COMMIT_DATE`和`GIT_AUTHOR_DATE`
wweir
2025 年 10 月 31 日
前段时间,我一句话让 claude code 给我改了
unused
2025 年 10 月 31 日
defunct9
2025 年 11 月 2 日
zzhaolei
2025 年 11 月 2 日
那都合并到 main 了,也要让你 force push ?不怕出问题吗?

公司没明确说的,我都是用自己的邮箱,懒得改
smallparking
2025 年 11 月 3 日
我的建议是别改 影响太大,利益太小

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1169644

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX