Git のバージョン 1.9.1 で確かめていますが 1.7.12 より新しいなら大丈夫だと思います (根拠: https://raw.github.com/git/git/master/Documentation/RelNotes/1.7.12.txt ).
Git は git rebase
で世界線を弄って歴史改変が出来ることで有名ですが (個人の感想です),Initial commit の CommitDate だけは,どうにもしがたいですよね.
そこで環境変数の指定で無理矢理 --committer-date-is-author-date
相当のことを実現する方法です.
git rebase -i --root
まずこれで interactive mode の rebase を始めて,Initial commit を e
(もしくは edit
) にします.
すると「さぁ git add
なり何なりして git rebase --continue
して下さいね〜」状態になりますね.ここで
GIT_COMMITTER_DATE='Thu Apr 10 03:21:56 2014 +0900' git commit --amend
としてやります.指定する時間は予め元の Initial commit を見て調べておきましょう.そして git rebase --continue
すれば無事 Initial commit を書き換えたのにハッシュが変わっただけで時刻は CommitDate も AuthorDate も変わっていないという状態になります.
そして仕上げに
git rebase <Initial commit のハッシュ値とか master^^^^^... とか指定する> --committer-date-is-author-date
すれば,なんと,ミス修正の痕跡 (CommitDate と AuthorDate のズレ) を一切残さずに修正が完了します.
だから何やねんて言われたら困るんですけど,git push
をする前なら自分は一度もミスしてないんだぜ凄いだろと言い張ることが出来ます.
その昔は git rebase
では Initial commit だけは操作することが出来なかったので,空の .gitignore
を作成しただけの Initial commit を作っておくとかいう姑息なことを自分はやってました.全ては綺麗な歴史のためです.しかし今はもう --root
オプションがあるため不要です.Initial commit のミスですらミスしてなかった風に修正することが出来ます.
だから何やねん.
補足のような何か
--root
オプションは参考リンク見て貰っても分かる通り引数 (コミット,例えば master
とかハッシュ値とか) が取れます.引数があれば Initial commit からそこまでを書き換える…という動作をします (何のために使うのかよく分からん).