變更所有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暫存。