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

47 天前
 lixyz

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

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

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

求教大佬

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

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

我试一下二位说的,先拿个测试仓库测试一下子,多谢多谢
victimsss
47 天前
commit hash 包括提交者信息和时间吧 你用工具修改了邮箱 之前的 commit hash 也会重写 对整个仓库的提交者都有影响
skiy
47 天前
# 修改 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
47 天前
如果只是为了统计代码行数,那分邮箱统计出来后,再按单用户多邮箱合并一下不就行了
为什么要去改 git 历史呢。。。
lixyz
47 天前
@icyalala 可能是公司的统计工具,只支持公司内部邮箱吧,反正现在领导反馈能改的话最好改一下。。。无奈。。。
mach9452
47 天前
学会拒绝
awsl2333
47 天前
只能 rebase + push -f 了
svon
47 天前
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
47 天前
还有注意`GIT_COMMIT_DATE`和`GIT_AUTHOR_DATE`
wweir
47 天前
前段时间,我一句话让 claude code 给我改了
unused
47 天前
defunct9
45 天前
zzhaolei
45 天前
那都合并到 main 了,也要让你 force push ?不怕出问题吗?

公司没明确说的,我都是用自己的邮箱,懒得改
smallparking
44 天前
我的建议是别改 影响太大,利益太小

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

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

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

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

© 2021 V2EX