汚い commit 履歴を修正する

すでにプッシュしているコミットを書き換えたら更に汚くなってしまいました。猛省いたします。

commit 履歴が汚すぎる問題

commit 履歴に関してなのですが、committer も author も違うし、commit と進捗の関係が全くない、という汚い状態でした。最低限、committer は修正したかったので、rebase を勉強しつつ修正しました(参照:6.4 Git のさまざまなツール – 歴史の書き換え)。

ただ、

……といった作業を、変更内容を他のメンバーに公開する前ならいつでもすることができます。

とか

すでにプッシュしているコミットは書き換えないようにしましょう。

とか

すでに中央サーバーにプッシュしたコミットをここに含めてはいけません。含めてしまうと、同じ変更が別のバージョンで見えてしまうことになって他の開発者が混乱します。

など、散々警告してくれていたのに rebase してしまった結果、更に履歴が汚くなってしまいました。今後は気をつけます。 (しかも最小限の規模で試せばよかったのに、なぜ4回分で試してしまったのか問い詰めたい)

まずは履歴を確認しよう

ローカルの履歴は git log で確認できますが、git log --help で確認できる色々なオプションがつけられます。とりあえず、committer と author を確認したいので --pretty=full、時系列に並べて見やすくするために --graph、そして直近の10回の履歴を確認するために -10 というオプションを渡して表示してみます。

git log --pretty=full --graph -10

これで ローカルの コミット履歴が表示されました。

そして履歴を変更しよう

以下のコマンドのように、git rebase -iの引数で変更する範囲を設定できます。あとは対話的に変更をして commit し、 rebase を続けていくだけです。

git rebase -i HEAD~3

参考

  • https://git-scm.com/book/ja/v1/
  • https://git-scm.com/docs/git-rebase
  • https://goo.gl/iJwfUq

その他

全く関係なく初歩的なことなのですが、URLに日本語が含まれているとパーセントエンコーディングで見た目が騒がしくなります。そんな場合はGoogle URL Shortenerのようなサービスを使うとスッキリしますね。