globalなuser.nameが"xxx"
globalなuser.emailが"xxx@example.com"
で設定されているとします。
特定のレポジトリの
user.nameを"mamor"
user.emailを"mamor@example.com"
にするつもりが、設定を忘れて、前述のglobalなuser.nameとuser.emailでcommitしてGitHubにpushしてしまったら。何としてでも書き換えたくなります。
尚、この操作は、GitHub(というかbareレポジトリ)を複数人で使っている場合は絶対に行わないで下さい。もはや破壊行為です。また、一人で使っていても、複数端末でcloneしている場合は、ちょっと手こずるかもしれません。(authorとcommitterを書き換えた端末以外の端末では、cloneし直すのが手っ取り早いのかな。)
(1) 予め、globalなuser.nameとuser.emailを設定します。
$ git config --global user.name "xxx" $ git config --global user.email "xxx@example.com"(2) GitHubでレポジトリを作成して、cloneして、statusを見てみます。
$ git status # On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track)(3) 適当に3コミットほどしてみます。
$ touch xxx.txt $ git add xxx.txt $ git commit -m "xxx" [master (root-commit) 8541db6] xxx 0 files changed create mode 100644 xxx.txt $ touch yyy.txt $ git add yyy.txt $ git commit -m "yyy" [master 7c73ecb] yyy 0 files changed create mode 100644 yyy.txt $ touch zzz.txt $ git add zzz.txt $ git commit -m "zzz" [master 6dcfe97] zzz 0 files changed create mode 100644 zzz.txt本当はこの操作の前に
$ git config user.name "mamor" $ git config user.email "mamor@example.com"をすべきでした。という話です。
(4) logを見てみます。
$ git log commit 6dcfe97230f09bc793175a5af1a15027292c53c2 Author: xxx <xxx@example.com> Date: Tue Dec 11 21:51:33 2012 +0900 zzz commit 7c73ecbc337361bca1af5d1722816666bd6b0d33 Author: xxx <xxx@example.com> Date: Tue Dec 11 21:51:11 2012 +0900 yyy commit 8541db609a8ee4c9797216ef131bb4699c66281c Author: xxx <xxx@example.com> Date: Tue Dec 11 21:50:37 2012 +0900 xxx(5) pushします。
$ git push origin master Password for 'https://mp-php@github.com': Counting objects: 7, done. Delta compression using up to 4 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 548 bytes, done. Total 7 (delta 1), reused 0 (delta 0) To https://mp-php@github.com/mp-php/test.git * [new branch] master -> master(6) authorとcommitterを書き換えます。
$ git filter-branch -f --env-filter "GIT_AUTHOR_NAME='mamor'; GIT_AUTHOR_EMAIL='mamor@example.com'; GIT_COMMITTER_NAME='mamor'; GIT_COMMITTER_EMAIL='mamor@example.com';" Rewrite 6dcfe97230f09bc793175a5af1a15027292c53c2 (3/3) Ref 'refs/heads/master' was rewritten* もし、直近の2コミットのみを修正したい場合は"HEAD~2..HEAD"を末尾に付け足します。
(7) logを見てみます。全コミットのハッシュ値も変わっています。(4)とは全く別物です。
$ git log commit 43b748b0386713e31bce00593991438204c981e0 Author: mamor <mamor@example.com> Date: Tue Dec 11 21:51:33 2012 +0900 zzz commit df224eaec1c14f6e352dbfc485bb781f3b98a357 Author: mamor <mamor@example.com> Date: Tue Dec 11 21:51:11 2012 +0900 yyy commit 9d74427602221a9c6711be91bf9029159b177e49 Author: mamor <mamor@example.com> Date: Tue Dec 11 21:50:37 2012 +0900 xxx(8) 強制pushします。
$ git push origin master -f Password for 'https://mp-php@github.com': Counting objects: 7, done. Delta compression using up to 4 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 551 bytes, done. Total 7 (delta 1), reused 0 (delta 0) To https://mp-php@github.com/mp-php/test.git + 6dcfe97...43b748b master -> master (forced update)
authorとcommitterの書き換え参考:
http://d.hatena.ne.jp/idesaku/20090908/1252419890
http://d.hatena.ne.jp/flalin/20110330/1301484566
http://d.hatena.ne.jp/naga_sawa/20110119/1295420861
authorとcommitterの違い参考:
http://d.hatena.ne.jp/shigemk2/20120310/1331314603
No comments:
Post a Comment