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

18 小时 31 分钟前
 lixyz

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

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

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

求教大佬

1690 次点击
所在节点    git
13 条回复
maichael
18 小时 15 分钟前
git-filter-repo 之类的工具,具体用法你问 AI 就好,不过肯定是要 force push 的,谨慎操作。
dif
18 小时 13 分钟前
git filter-branch 试试

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

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

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

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

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

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

© 2021 V2EX