A note of a person who is learning programming, SakaTaQ

ロック好きのプログラミング学習

git rebase -i を使ってみた

色々と作っている際にtypoの修正だったりで細かいコミットが増えた時に、コミットログをまとめてしまっても問題ない場合に使えないかな?
と、思ってちと使ってみました。

状況より

f:id:saka20taku43:20200509132237p:plain

実務でチーム開発しているわけでもないですが、いずれはgitを使わない時が来なくなるかもなので、何事も練習精神ってことで。

現在、特に大きな変更点がないコミットばかりが多数残ってしまってるので、これをまとめてしまいたいなって時に git rebase -i が使えるよってことですね。
rebase 自体がブランチの歴史の書き換えとかを行うコマンド。
-i は --intaractiveの略で、対話的という意味のオプション。
対話的に現在のブランチのコミットログを構築し直すことができるという機能 、やはり言葉だけでは僕は理解できません😅

行ったこと

添付画像にある通りですが、まずは現状のコミットのログの確認

% git log

ターミナル上にコミットのログが表示される。最新のものが一番上に来るようになっている。
今回は、masterブランチのみしか存在しない。別のブランチで作業を行っていて、そのログを確認、まとめたい場合は% git checkout ブランチ名でブランチを切り替えてからlogやrebaseを行わないと別のブランチのログが出てきてしまうので注意する。
(とりあえず、masterでやる意味あるのか?という疑問はさておき) まとめる為のコマンドとしては

% git rebase -i HEAD~n

n には最新のコミットである[ HEAD ]から数えて何番目まで構築し直させるか、で数字を入力する。
今回はコミットを開始した時のものと、それ以降の「テスト」「ファイルの修正、準備」「READMEの修正(最新)」の4つのコミットをまとめたもの、2つで分けたいとしている。 全部で5つコミットがある内、最新から4つまでをまとめたい為、n=4 となる。

% git rebase -i HEAD~4

f:id:saka20taku43:20200509135455p:plain コマンドを打つとvimが起動する。
コミットは上の4行で、コマンド コミット番号 コミットメッセージの順で書かれている。
コマンドは下側に一覧があり、そこから使用するものを選んでいる、という形。
pickコミットを使用
rewordコミットを使用するが、コミットメッセージを編集
editコミットを使用するが、修正のために停止する
squashコミットは使うが、以前のものにマージする
fixupsquashと似ているが、このコミットのログメッセージは破棄する
execシェルを使用してコマンド(行の残りの部分)を実行する
breakここで停止(git rebase --continue を使用して後でrebaseを続行)
dropコミットを削除
label現在のHEADに名前をつける
resetHEADをラベルにリセットする
merge元のマージコミットメッセージ(または元のマージコミットが指定されていない場合は1行)を使用して、マージコミットを作成します。コミットメッセージを元に戻すには、-c <commit>を使用します。

今回はコミットを1つにまとめmメッセージを変更したいので1行目のみを reword にし、それ以外はマージする(削除ではないので注意)。 iを押して挿入モードにして編集したら、:wqで保存しながら終了する。

f:id:saka20taku43:20200509144536p:plain reword を選択したので、1行目のコミットメッセージの編集をinsertモードで行い、:wq。

次に表示されているのは「これは4つのコミットの組み合わせです。最初のコミットメッセージ:〜」の形になっている。
f:id:saka20taku43:20200509145441p:plain 今回は4つのコミットをまとめてコミットログを書き換えたいので f:id:saka20taku43:20200509145527p:plain と書き換えて :wq

rebaseに成功した。念のため% git logでコミットログを確認。 f:id:saka20taku43:20200509150152p:plain

参考にさせていただいた記事: git rebase -i はやっぱりイケてる件【git】【rebase 】【iオプション】

今回ザッと書き出しましたが、他にもコマンドがあるので、使う機会があったら試してみたいですね。
調べて、試して、残す、を繰り返すのみ❗️

したらな❗️ 👋