よしたく blog

ほぼ週刊で記事を書いています

git rebaseでコミットをまとめる

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 個前までのコミットを表示している。

f:id:yoshitaku_jp:20201204212147p:plain

今回は「ep4,ep5,ep6」をシーズン 1 としてまとめたい。 ep4 へまとめる形にするので、「ep5,ep6」のpicksに変更する。 終わったら保存する。

f:id:yoshitaku_jp:20201204212206p:plain

保存が終了すると、まとめたコミットのコミットメッセージをどうするか聞かれる。 このままでよければ変更をせずに保存する。

f:id:yoshitaku_jp:20201204212222p:plain

ちなみに、変更をせずそのまま保存したときは git log すると次のようになる。 「ep4,ep5,ep6」のコミットメッセージがそのまま結合されている。

f:id:yoshitaku_jp:20201204212234p:plain

まとめるコミットメッセージを変更したい場合

まとめたコミットのコミットメッセージを変更したい場合は、ep4 部分に加筆修正し、ep5,ep6 の部分は削除する。今回は次のメッセージでコミットしてみた。

season1
ep4,ep5,ep6

f:id:yoshitaku_jp:20201204212247p:plain

git logすると、コメントが変更されていることがわかる。

f:id:yoshitaku_jp:20201204212301p:plain

yoshitaku-jp.hatenablog.com