[Git] rebase コマンドで複数のコミットを 1 つにまとめる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

git rebase

git の rebase はブランチを統合するためのコマンドです。
が、このコマンドは多機能であり、ブランチの統合以外にも様々な処理を行うことができます。

今回は 複数のコミットをひとつにまとめる という処理に的を絞って説明しようと思います。

手順

現在の作業履歴は以下の通りとします。(commit x はコミットメッセージ)

$ git log --oneline
5590c80 commit 3
a4641b0 commit 2
1c3cff8 commit 1
...

この直近 3 つのコミットを 1 つにまとめましょう。

1. 以下のコマンドを実行する

$ git rebase -i HEAD~3

コミットをまとめるためには -i というオプションを指定します。
iinteractive の頭文字です。

HEAD~3 で、現在のブランチの先頭から 3 つのコミットを抽出します。
上記のコマンドを実行すると以下の画面が表示されます。(先頭 # はコメント行)

1

2. pick を fixup に書き換える

2 つめと 3 つめのコミットに対し、コマンド pickfixup に書き換えます。(f でも OK)

2

pick はそのコミットを使用するコマンド、つまり変更なしです。
fixup はそのコミットを 1 つ前のコミットに統合し、その際コミットメッセージを破棄します。

これらの説明は上記の画面にも書かれています。

3. 保存して終了

デフォルトだと vi が立ち上がっているはずなので :wq で OK。
これで 3 つのコミットが 1 つにまとめられました。

$ git log --oneline
d0f5d1e commit 1
...

以上です。
ファイルの add し忘れや軽微な修正などで、余計なコミットを行ってしまったときなどに利用してみてはいかがでしょうか。

もし、コンフリクトなどで rebase に失敗した場合は以下のコマンドで一連の処理を取り消すことができます。
失敗を恐れずに色々試してみましょう。

$ git rebase --abort

リンク

ミレニアム・ファルコン製作日記 #57

57 号 表紙

mfd_57_1

パーツ

mfd_57_2

mfd_57_3

mfd_57_4

成果

mfd_57_5

mfd_57_6

今回の作業は以下の 4 つでした。

  • 制御回路基板を取り付ける
  • 外部電源ソケットを取り付ける
  • 配線を制御回路基板につなぐ
  • 搭乗ランプの動作チェック

回路の基盤を取り付けました。
この基盤、16 ものソケットが存在します。
それぞれどこに繋がるかがとても楽しみですね。
船体後部のイオンエンジン部分には間違いなく付くことでしょう!

動作確認もバッチリでした。
スイッチを入れると ウィーン という音とともに搭乗ランプがゆっくり開閉します。
一安心。

それではまた次回。

May the Force be with you!