git 公司用户名和自己的不同造成的
在提交代码的时候,默认使用了全局的git 用户配置,用户名 xiaoli
然后push 到github了
之后我配置了一下项目的git用户,使用了xiaowang
又push了一次代码
如果我现在想改写第一次的git commit 的用户邮箱该怎么做那?
我使用
git rebase -i HEAD~2
但是只出现了最后一次的提交信息。
git 公司用户名和自己的不同造成的
在提交代码的时候,默认使用了全局的git 用户配置,用户名 xiaoli
然后push 到github了
之后我配置了一下项目的git用户,使用了xiaowang
又push了一次代码
如果我现在想改写第一次的git commit 的用户邮箱该怎么做那?
我使用
git rebase -i HEAD~2
但是只出现了最后一次的提交信息。
我的操作步骤略麻烦,所以备图以做注解:
首先,通过gitk
打开历史纪录,如下图:
本例中,我试图修改第三个提交more tests for later change cases
对应的用户名/邮箱信息。
第一步,拷贝第四个提交update readme
的SHA1 ID
值,如上图选中部分4535579
(不必全部,印象中前八位足矣)
第二步,回到命令行,开始执行rebase -i
操作,如下:
git rebase -i 4535579
这个时候,git
会自动调用配置好的编辑器打开一个界面,如下:
第三步,修改第一行数据(就是我们预期要修改的那条commit)的pick
为edit
,如下:
保存退出,可以看到如下结果:
帅,这时候我们就可以通过git commit --amend
来畅快的修改用户信息了,操作如下:
git commit --amend --author="LiLei <lilei@qq.com>" --no-edit
继续完成rebase
,
git rebase --continue
再次打开gitk
,就可以享受你的结果了:
最后,通过git push --force
将篡改历史纪录后的结果同步到服务器
注意,强制更新会有一定风险,就是这个时候如果有其他人也在向服务器提交代码,那会被你的强制更新给覆盖掉。
试试这个,加入判断, @雾秋 说的那样会将前N条提交记录全替换掉,不一定适合所有场景,当然所说的指定替换哪几次提交到是好挺好的。
git filter-branch --force --env-filter '
#如果Git用户名等于老的Git用户名 wangshuyin
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" || "$GIT_AUTHOR_EMAIL" = "<Old Email>" ];
then
#替换提交的用户名为新的用户名,替换提交的邮箱为正确的邮箱
GIT_COMMITTER_NAME="<New name>";
GIT_COMMITTER_EMAIL="<New email>";
#替换用户名为新的用户名,替换邮箱为正确的邮箱
GIT_AUTHOR_NAME="<New name>";
GIT_AUTHOR_EMAIL="<New email>";
fi
' --tag-name-filter cat -- --all
2 回答1.2k 阅读✓ 已解决
3 回答1.8k 阅读
2 回答1.2k 阅读
1 回答1.1k 阅读
2 回答948 阅读
766 阅读
1 回答345 阅读
自问自答
我现在是写了一个脚本,如果某个项目用错了
git
用户信息,我就把脚本放到项目里,运行一下脚本。脚本内容
changeGitInfo.sh
使用方式