最近手上设备比较多,提交混乱了。对于自己一个日常用的github仓库,用了公司的电脑修改少许代码后提交了。本来拉取时已经将git的地址(git remote -v查看)修改为私人token的地址了(比如git remote set-url origin https://bob:token@github.com/bob/repo.git),但是公司电脑上设置过global全局的git配置,于是看到提交记录里最新的几个变成了自己公司的用户名和邮箱,打算改回私人的名字和邮箱,毕竟这个不是公司用的。
切换到该仓库的目录,先看看global和local有不有信息,发现global有,local没有
git config --global -l # -e是编辑; global有信息
git config --local -l # local未设置信息
用git log查看了最近4次都是用的公司的用户名和邮箱,还好不是公司的和私人的记录混合着,好处理一些。
马上设置一下local的信息
git config --local user.name "bob"
git config --local user.email "xx@yy.com"
git config --local -l # 再检查一次
如果只是最后一次执行错了,就执行这个
git commit --amend --reset-author --no-edit
因为这里有4次连续的最近提交,就这样执行
git rebase -i HEAD~4
在弹出的文本编辑器中,将要修改的那4行开头的 pick 改为 edit,:wq保存并退出。
此时git会分别停留在这4次提交的每一次提交上,分别执行命令,直到不再提示。
git commit --amend --reset-author --no-edit
git rebase --continue
做了4次后没有提示了,此时再运行命令
git push origin main --force
然后再次git log就能看到最近4次的提交的用户名和邮箱都修改到了。
不过对于提交记录里不同的用户名混杂在历史中,这样就不行了,这样的情况下可以试试Git官方推荐的git-filter-repo工具,或者使用以下传统的filter-branch 脚本(未运行过,谨慎修改):
git filter-branch --env-filter '
OLD_EMAIL="公司邮箱@company.com"
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
然后先本地git log看看,没问题后就强制提交到github同步
git push origin --force --all
文章评论 (0)