变更所有git Author资讯

变更所有git Author资讯

使用git好长一段时间,但都利用Source Tree帮助我做版本控制,结果看着长长的commit后才发现可能因为每次环境、机器不同或是重灌系统后一些原因,造成commit上的email却不相同实在很困扰。

在网路上找到好多资讯,终于找到一个很正式的教学文件,然而这是从Github help上找到的Changing author info,想看原文的直接点入,下面总结一下做法:

  • 重新Clone一份带有bare参数的完整档案
git clone --bare https://github.com/user/repo.git
cd repo.git

  • 制作相关的shell script

下面内容存成git-author-rewrite.sh,并且变更OLD_EMAILCORRECT_NAMECORRECT_EMAIL

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="要变更的email"
CORRECT_NAME="变更后的名字"
CORRECT_EMAIL="变更后的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

此script会找到你要变更的email并且取代成你设定的,将档案存档后将属性设成可执行:

chmod +x git-author-rewrite.sh

  • 变更author资讯

到console后切换到你clone好的repository目录,并且执行刚存好的git-author-rewrite.sh会进行变更:

osx-prj:001_iOS danny$
/Users/danny/Documents/Workspace-Public/git-author-rewrite.sh

变更完成后会看到像下面的过程:

Rewrite 41786fb21e26347282e35f0fb077cdc9051e5e16 (30/30)
Ref 'refs/heads/master' was rewritten

这代表你完成变更。

  • 重新Push变更完成的repository

以上变更完成后要来强制将现有变更的资讯push到原先的repository

git push --force --tags origin 'refs/heads/*'

完成后你就可以删除之前clone下来的repository暂存。