git rebase -iでコミットの順番を入れ替える方法をわかりやすく解説!

git rebase -i(インタラクティブモード)を利用すると、コミット履歴をきれいに整理できます。例えば、複数のコミットをまとめたり、コミットの順番を変更したり、過去のコミットメッセージを変更したりすることができます。

この記事では、git rebase -iを用いてコミットの順番を入れ替える方法についてわかりやすく解説します。

git rebase -iでコミットの順番を入れ替える方法

まず、次のようなコミット履歴があるとします。

$ git log --oneline --reverse
...(略)
e988a35 commit A
216dd56 commit B
8019534 commit C
35b43cf (HEAD -> main) commit D

今回は、git rebase -icommit Acommit Cの順番を入れ替えてみましょう。

手順を以下に示します。

コミットの順番を入れ替える手順

  • git rebase -iコマンドを実行する
  • テキストエディタでコミットの順番を入れ替える

では上記の手順について順番に説明します。

git rebase -iコマンドを実行する

git rebase -i(または、git rebase --interactive)コマンドを実行します。

git rebase -i HEAD~~~~
#以下のコマンドでも可能
git rebase --interactive HEAD~~~~
git rebase -i HEAD~4
git rebase --interactive HEAD~4

上記のコマンドはHEADから4つ分のコミットを対象にリベースを開始するコマンドです。

テキストエディタでコミットの順番を入れ替える

git rebase -iコマンドを実行すると、するとテキストエディタ(たいていvim)が開き、HEADから4つ分のコミットが表示されます。

pick e988a35 commit A
pick 216dd56 commit B
pick 8019534 commit C
pick 35b43cf commit D

# Rebase b8a1a26..35b43cf onto b8a1a26 (4 commands)
(以下略)

今回は、commit Acommit Cの順番を入れ替えます。以下に示すように、なお、順番を入れ替える際には、まずiキーを押してインサートモードに切り替えます。インサートモードでcommit Acommit Cの順番を入れ変えたら escキーでインサートモードを終了し、:wqを入力した後、Enterキーを押してテキストエディタを閉じます。

pick 8019534 commit C
pick 216dd56 commit B
pick e988a35 commit A
pick 35b43cf commit D

# Rebase b8a1a26..35b43cf onto b8a1a26 (4 commands)
(以下略)

git logコマンドでコミットの順番を入れ替わっているかを確認する

git logコマンドを実行してコミットがまとまっているかを確認してみましょう。

$ git log --oneline --reverse
...(略)
feb2a9a commit C # ← コミットのハッシュ値(feb2a9a...)は新たな値が割り振られている
39ef5ca commit B # ← コミットのハッシュ値(39ef5ca...)は新たな値が割り振られている
4b9093c commit A # ← コミットのハッシュ値(4b9093c...)は新たな値が割り振られている
7603fb9 (HEAD -> main) commit D # ← コミットのハッシュ値(7603fb9...)は新たな値が割り振られている

上記コマンドの実行結果を見ると、コミットの順番を入れ替わっていることが分かります。なお、コミットのハッシュ値は新たな値が割り振られます

本記事のまとめ

この記事ではgit rebase -iコミットの順番を入れ替える方法について、以下の内容を説明しました。

  • git rebase -iコマンドの実行方法
    • git rebase -i HEAD~nコマンドで、HEADからnつ分のコミットを対象にリベースを開始します。
  • コミットの順番を入れ替える方法
    • git rebase -iコマンド実行後に表示されるテキストエディタで入れ替える。
  • git logコマンドでの確認
    • git log --onelineコマンドで、コミットが入れ替わっているかを確認する。コミット順番を変えると、新しいコミットハッシュ値が割り振られる。

お読み頂きありがとうございました。