最近使用git的时候,由于在开始的时候,没有恰当的设置user.name和user.email变量,导致push到git的commit记录无法被正确匹配到我的账户。由于发现的比较完,几十条commit记录都给白费了,看这contributes板上大片的空白,还是相当的不甘心的。不过还好,git官方给出了弥补措施。
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"
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
在这个脚本中,修改OLD_EMAIL, CORRECT_NAME和CORRECT_EMAIL变量,然后在repo目录下执行,就可以将之前的错误commit全部修改过来了。
脚本执行完后,执行git push origin master --force就可以把github上的日志也全部修改过来了。在这里,由于使用的是公司搭建的gitlab,我还遇到了如下报错:remote: GitLab: You are not allowed to force push code to a protected branch on this project.。原来是gitlab默认给master分支加了保护,不允许强制覆盖。于是去gitlab下点击project->setting->protected branch,把master的保护去掉就可以了。修改完之后,建议把master的保护再加回来,毕竟强推不是件好事。