git rebase で過去のコミットをまとめることができる。
今回は題材としてスターウォーズを取り上げて実践してみる。 想定のケースは「各エピソードごとのファイルを作成しコミットしたが、やっぱりシーズンごとにファイルをまとめてコミットしたい」というものにする。
準備
まずはファイルを作成する。
mkdir star-wars cd star-wars touch star-wars1.txt touch star-wars2.txt touch star-wars3.txt touch star-wars4.txt touch star-wars5.txt touch star-wars6.txt
次に git でコミットしていく。
git init git add star-wars1.txt git commit -m 'ep1' git add star-wars2.txt git commit -m 'ep2' git add star-wars3.txt git commit -m 'ep3' git add star-wars4.txt git commit -m 'ep4' git add star-wars5.txt git commit -m 'ep5' git add star-wars6.txt git commit -m 'ep6'
ここまではエピソードごとにファイルをコミットしてきた。 しかし、コミットの粒度が細かすぎると感じたため、シーズンごとまとめることにした。
git rebase
でコミットをまとめる
git rebase -i HEAD~5
を実行するとエディタの画面に切り替わる。
今回は 5 個前までのコミットを表示している。
今回は「ep4,ep5,ep6」をシーズン 1 としてまとめたい。 ep4 へまとめる形にするので、「ep5,ep6」のpickをsに変更する。 終わったら保存する。
保存が終了すると、まとめたコミットのコミットメッセージをどうするか聞かれる。 このままでよければ変更をせずに保存する。
ちなみに、変更をせずそのまま保存したときは git log すると次のようになる。 「ep4,ep5,ep6」のコミットメッセージがそのまま結合されている。
まとめるコミットメッセージを変更したい場合
まとめたコミットのコミットメッセージを変更したい場合は、ep4 部分に加筆修正し、ep5,ep6 の部分は削除する。今回は次のメッセージでコミットしてみた。
season1 ep4,ep5,ep6
git log
すると、コメントが変更されていることがわかる。