变更所有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_EMAIL
、CORRECT_NAME
、CORRECT_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暂存。