読者です 読者をやめる 読者になる 読者になる

量産型エンジニアの憂鬱

きっと僕は何物にもなれない。

Gitで試行錯誤したコミットをまとめたい

GitとCIサービスを連携していて、CIサーバの設定がうまくいかなくて何度もコミットしちゃうことありますよね。
amend をつけててもリモートリポジトリに push する段階でマージを余儀なくされたり。
--force で push すればよいのですが、あとから一連のコミットをまとめたい場合の操作。

以下のコマンドをうってログを表示

git log --oneline
2dae1e1 travis.yml修正
9bc8c31 travis.yml修正
ebb438c init. commit.

今回は travis.yml で試行錯誤したコミットをまとめたいと思います。

rebase を使います。まとめたい一連のコミットのひとつ前を指定。

git rebase -i ebb438c

すると編集画面が立ち上がります。

  1 pick 9bc8c31 travis.yml修正
  2 pick 2dae1e1 travis.yml修正
  3 
  4 # Rebase ebb438c..2dae1e1 onto ebb438c (1 command(s))
  5 #
  6 # Commands:
  7 # p, pick = use commit
  8 # r, reword = use commit, but edit the commit message
  9 # e, edit = use commit, but stop for amending
 10 # s, squash = use commit, but meld into previous commit
 11 # f, fixup = like "squash", but discard this commit's log message
 12 # x, exec = run command (the rest of the line) using shell
 13 # d, drop = remove commit
...

説明にある通り、s にすると一つ前のコミットとまとめてくれます。

  1 pick 9bc8c31 travis.yml修正
  2 s 2dae1e1 travis.yml修正

これで編集を保存して終了すると、新しいコミットメッセージを入力する画面になるので入力してできあがり。

あとは

git push --force

してやればまとまります。

でも force push は複数人で開発してるリポジトリにはやめといた方がいいですね。