初心者データサイエンティストの備忘録

調べたことは全部ここに書いて自分の辞書を作る

【Git】すごいぞrebase -i

Git上でコミットを修正したいとき、rebase -iさえ覚えていればいろいろできることを知り感激。 この感激を忘れないために記事にすることにしました。

git rebase -iでできること

git rebase -iでできることのうち、よく使うコマンドについてだけ書きます。

  • 過去のコミットメッセージの変更
  • 過去のコミットを合体させる
  • 過去のコミットを消す

具体的な手順

過去のコミットメッセージの変更

やりたいこと↓

コミットメッセージの変更

HEADを含めて2個前のコミットを修正したいので、下記のコマンドを打ちます。

git rebase -i HEAD~2

すると、下記のようなエディターが開くので、対象のコミットのpickをrewordに書き換え保存します。

図2:rebase -iで開いたエディタの編集

上記でエディターを保存して消すと、さらにエディターが開くのでtypoされたコミットメッセージを正しいコミットメッセージに修正します。

図3:コミットメッセージの修正

過去のコミットを合体させる

やりたいこと↓

図4:コミットの合体

今回も同じように、下記のコマンドを打ってエディターを開きます。

git rebase -i HEAD~2

このとき、エディターに記載された対象のコミットのpickをsquashに書き換えます。

図5:rebase- -iで開いたエディタの編集

さらに新しく開いたエディターを図6のように編集することで、コミットを合体し、かつコミットメッセージを修正することができます。

図6:コミットメッセージを修正して、コミットを合体させる

なお、図5でpickをsquashではなく、fixupと書き換えるとコミットメッセージを変えずにコミットを合体させることができます。(図7のようになります)

図7:コミットメッセージを変えずにコミットを合体する

過去のコミットを消す

やりたいこと↓

図8:コミットの削除

同じようにgit rebase -i をして、pickをdropに置き換えるだけです。

まとめ

git rebse -iを打つと出てくるエディターに対して、対象のコミットをpickから書き換えることで、様々なコミットの改変をできることを学びました。 pickから書き換える文字列とそれによって改変できる内容は下記の通りです。

  • 過去のコミットメッセージの変更:reword
  • 過去のコミットを合体させる
    • コミットメッセージを変更する場合:squash
    • コミットメッセージを変更しない場合:fixup
  • 過去のコミットを消す:drop