git修改提交者用户名和邮箱

背景

开发过程中, 我们会经常混迹与不同的代码仓库,时常不同仓库会有作者信息验证。比如公司内建的gitlab一般会要求统一使用公司内部的域账号签名;github要求使用github账号签名等。因此,很容易犯在不同库中提交代码发现默认配置(全局)的author信息没有变更,结果push被拒绝或泄漏了姓名。

下面介绍几种常用的解决方式,当然最终还是需要养成切换代码库检查author信息的习惯,主动配置

1
2
3
4
5
6
7
// 设置全局
git config --global user.name "Author Name"
git config --global user.email "Author Email"

// 设置当前项目库配置
git config user.name "Author Name"
git config user.email "Author Email"

解决方案一

如果只需要最近一次提交,那么很简单直接使用git commit --amend就可以搞定

1
git commit --amend --author="NewAuthor <NewEmail@address.com>"

解决方案二

如果是多个修改,那么就需要使用到git filter-branch这个工具来做批量修改为了方便大家使用,封装了一个简单的shell脚本,直接修改[XXX]中的变量为对应的值即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/sh

git filter-branch --env-filter '

an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"

if [ "$GIT_COMMITTER_EMAIL" = "[Your Old Email]" ]
then
cn="[Your New Author Name]"
cm="[Your New Email]"
fi
if [ "$GIT_AUTHOR_EMAIL" = "[Your Old Email]" ]
then
an="[Your New Author Name]"
am="[Your New Email]"
fi

export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'

运行

  1. 将该脚本另存为changGitInfo.sh
  2. 为该文件添加可执行权限
  3. 将该文件拷贝至指定项目的根目录中
  4. 执行指令 sh changGitInfo.sh
  5. 提交到远程库, git push --force

转载

本文出自<<arccode>>, 欢迎转载, 转载请注明出处.