戦えプログラマン

いつだって戦いなのだ

過去のコミットコメントやコミッターを修正する

「公開リポジトリなのに実名でコミット&プッシュしてる(驚愕)」
なんてことに後から気付いた時に。

gitはとても過去改竄し易いので、私のような注意散漫なアホにはありがたい。
リポジトリぶっ壊してヘラヘラしてもすぐ直せるし。

で。掲題の手順は、
1, rebaseで過去改竄。
2, 強制pushでリポジトリを上書き。
これだけ。


1, rebaseで過去改竄。

# 戻りたいあの頃を確認する。
$ git log -5 --oneline
b6b6d5b doing Section 3-6     ←こいつら
899f3c2 done Section 2        ←を
4de711d done Section 1        ←修正
9c2d1e0 1st commit            ←したい
defb09e upgrade UTFlute to 0.5.0-sp9

# とりあえず上から5つくらい(適当)を修正したい。
$ git rebase -i HEAD~5

# viが開くので、viの操作方法をググって「pick」の部分を書き換える。
------------------------------------------------
pick defb09e upgrade UTFlute to 0.5.0-sp9
pick 9c2d1e0 1st commit
pick 4de711d done Section 1
pick 899f3c2 done Section 2
pick b6b6d5b doing Section 3-6
(以下略)

↓

pick defb09e upgrade UTFlute to 0.5.0-sp9    #変更しないやつはそのまま。
edit 9c2d1e0 1st commit
e 4de711d done Section 1   # edit は e と略せる。
e 899f3c2 done Section 2
e b6b6d5b doing Section 3-6
(以下略)
------------------------------------------------

# 編集したら、:wqで上書き、閉じる。元のcmd画面に戻る。
$ git rebase -i HEAD~5
Stopped at 9c2d1e0f19a8ef8806fba8668a0d0415a1a0edb1... 1st commit
You can amend the commit now, with
(以下略)

# amendオプションでコミットし直す。
$ git commit --amend -m "1st commitだぜ" --author="swan0 <swans.randomnessあっとgmail.com>"

# rebaseを続ける。(もし「過去の改竄なんてよくない」と思い直したら、git rebase --abort)
$ git rebase --continue

...
# edit指定したハッシュの分だけ、commit & rebase --continueを繰り返す。
...

Successfully rebased and updated refs/heads/master.


2, 強制pushでリポジトリを上書き。
ローカルリポジトリとリモートリポジトリが一致しなくなってしまったので、
ローカルでリモートを上書きする。

$ git push -f origin master

おわり。

ただし、複数人で同じリポジトリを使ってる場合は、コンフリクト祭りになるのでやめた方がよい。
過去の過ちを受け入れることも大切なのです。たぶん。