コミットした後に変数名が間違って(typoして)いたとかで、そのままコミットしてログを残すものちょっとかっこ悪いと言うときに、コミットをひとまとめにして無かった事にしたい場合があります。。。
そんな時はgit rebase -iコマンドでコミットをまとめます。
$ git log commit 0670c5ad84339ba6fcb2a922530e610ec056e9fb Author: user <user@example.com> Date: Thu Sep 25 00:01:00 2014 +0900 3つめのコミット commit 443e64b0e3631148219029f418bef2e92a1a4c4c Author: user <user@example.com> Date: Wed Sep 24 23:52:07 2014 +0900 2つめのコミット ←これを無かった事にしたい commit d4ae77426d3045a06d98056d1ccade4aa9e999ed Author: user <user@example.com> Date: Wed Sep 24 23:51:31 2014 +0900 1つめのコミット
HEADのあとに^を付けた数だけ編集対象にできます。
$ git rebase -i HEAD^^^ pick d4ae774 1つめのコミット pick 443e64b 2つめのコミット pick 0670c5a 3つめのコミット # Rebase 02e5822..0670c5a onto 02e5822 # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
表示された2つ目の
pick 443e64b 2つめのコミット
“pick”を”fixup”に変更してエディタを抜けます。
Successfully rebased and updated refs/heads/master.
と表示されれば成功です。
念のためgit logを確認しておきます。
$ git log commit 16b1c9a9b311cc4ab4039c3e7a9bc1cda8269c2b Author: user <user@example.com> Date: Thu Sep 25 00:01:00 2014 +0900 3つめのコミット commit 9cf02d4915065c90460607ad56a0b7e5e1348568 Author: user <user@example.com> Date: Wed Sep 24 23:51:31 2014 +0900 1つめのコミット
2つめのコミットがなくなっているのが確認できます。
fixupの他にも、reword, edit, squashなどが選択でき、その時々の状況で使い分けると見通しのよいコミットログになるかと思います。