対話的にリベースを行うインタラクティブモードとは
「リベース」では、対話的にリベースを行うことができます。対話的にリベースを行うモードのことを、「インタラクティブモード」といいます。
ユーザーがリベース処理に介入できる
通常のリベースでは、「Git」がどのコミットオブジェクトを対象にしてリベースを行うのかなど、リベースに関する処理を自動的に行います。この時、リベース内容にユーザーが積極的に介入することはありません。
インタラクティブモードでリベースを行うことで、ユーザーがこのリベース処理の一連の過程を変更することができます。
例えば、以下のような変更が可能です。
- リベース対象のコミットオブジェクトの処理順を変更する
- リベース対象のコミットオブジェクトを追加削除する
- リベース対象のコミットオブジェクトを削除する
- リベース後に任意のシェルコマンドを実行する
インタラクティブモードでリベースを実行するには
「インタラクティブモード」でリベースを実行する方法です。1.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。現在のブランチは、「fix」ブランチであることが分かります。
同様に、「HEAD」は「fix」ブランチを指していることが分かります。
ここでは例として、「fix」ブランチを「master」ブランチにリベースし、「mastsr」ブランチに「fix」ブランチの変更内容を結合します。
2.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「fix」ブランチを「master」ブランチにリベースするため、リベース対象の「コミットオブジェクト」は、以下のようになります。
コミットオブジェクト | コミットオブジェクトの識別子 |
---|---|
Commit4 | b3558792781286ca90af046c9318dd9072fe9014 |
Commit5 | 2ce00c397fab7fda134ac653ce9f34c0b9ee005f |
3.コマンドの実行
コマンドのオプションは、以下のオプションを指定します。ショートオプション | ロングオプション |
---|---|
-i | --interactive |
「端末」から、以下のコマンドを実行します。
コマンドの詳細は、「ファイルの変更内容を異なるブランチに結合するコマンドの説明」を参考にしてください。
ポイントは、赤字の箇所です。
git rebase --interactive master
これで、インタラクティブモードになります。
インタラクティブモード
インタラクティブモードでリベースを実行すると、以下のようにテキストエディター(nano)が起動し、リベース方法を記述する画面が表示されます。ここに記述されている内容に従って、リベースが行われます。
またこの記述内容のことを、「todoリスト」といいます。
コメント行について
「#」で始まる行は、コメント行です。リベース処理に影響を与えません。
リベース対象のコミットオブジェクト
1行に1つずつ、リベース対象の「コミットオブジェクト」の識別子が表示されます。
pick b355879 fix
pick 2ce00c3 fix
pick 2ce00c3 fix
リベース対象の「コミットオブジェクト」の識別子は、以下のフォーマットで記述されます。
コマンド リベース対象のコミットオブジェクトの識別子 コミットタイトル
上記の例と組み合わせると、以下のようになります。
コマンド | リベース対象のコミットオブジェクトの識別子 | コミットタイトル |
---|---|---|
pick | b355879 | fix |
pick | 2ce00c3 | fix |
コマンドは、「コミットオブジェクト」の処理方法を指定します。
リベース対象の「コミットオブジェクト」の識別子は、最初の数文字が表示されます。
「コミットタイトル」は、利便性のために表示されています。
リベース実行時、「コミットタイトル」は使用されません。
リベース対象のコミットオブジェクトの適用順
リベース対象の「コミットオブジェクト」の適用順は、記述した順番になります。一番上の行に記述されているリベース対象の「コミットオブジェクト」から、下の行に向かって適用されていきます。
従って記述する順序を変更すれば、リベース対象の「コミットオブジェクト」の適用順を変更することができます。
リベース対象の「コミットオブジェクト」の適用順の変更例は、「インタラクティブモードで、リベース対象のコミットオブジェクトの適用順の変更して、リベースする」を参考にしてください。
リベース対象のコミットオブジェクトの追加や削除も可能
既存のリベース対象の「コミットオブジェクト」の行を削除すれば、その「コミットオブジェクト」はリベース対象から外れます。また、新規にリベース対象の「コミットオブジェクト」の行を追加すれば、その「コミットオブジェクト」をリベース対象にできます。
リベース対象の「コミットオブジェクト」の追加や削除の例は、以下を参考にしてください。
コマンドについて
「インタラクティブモード」では、各「コミットオブジェクト」をどのように処理するのかを、コマンドで指定します。以下のコマンドを指定できます。
- pick
- edit
- reword
- squash
- fixup
- exec
1.pick
このコマンドを指定した「コミットオブジェクト」は、通常のリベース処理を行います。2.edit
このコマンドを指定した「コミットオブジェクト」は、差分の適用及びコミットを行った後、リベースを中断します。ユーザーは、差分が適用されたファイルの確認やファイルの編集などを行うことができます。
その後、ユーザーはリベースを続行できます。
このコマンドの使用例は、「インタラクティブモードで、差分適用後にリベースを中断する」を参考にしてください。
3.reword
このコマンドを指定した「コミットオブジェクト」は、通常のリベース処理を行いますが、コミット時にユーザーはコミットメッセージを指定できます。このコマンドの使用例は、「インタラクティブモードで、コミットメッセージを指定してリベースを行う」を参考にしてください。
4.squash
このコマンドを指定した「コミットオブジェクト」の変更内容は、1つ前の「コミットオブジェクト」の変更内容に統合されます。ユーザーは、コミット時にコミットメッセージを指定できます。
このコマンドの使用例は、「インタラクティブモードで、1つ前のコミットオブジェクトに変更内容を統合し、コミットメッセージを指定してリベースを行う」を参考にしてください。
5.fixup
このコマンドを指定した「コミットオブジェクト」の変更内容は、1つ前の「コミットオブジェクト」の変更内容に統合されます。ユーザーは、コミット時にコミットメッセージを指定できません。
このコマンドの使用例は、「インタラクティブモードで、1つ前のコミットオブジェクトに変更内容を統合し、リベースを行う」を参考にしてください。
6.exec
ユーザーが指定したシェルコマンドを実行します。このコマンドのみ、「todoリスト」での記述方法が異なります。
リベースを行いながらソフトウェアがビルドできるかどうかテストするなど、任意のシェルコマンドを実行できます。
このコマンドの使用例は、「インタラクティブモードで、ユーザーが指定したシェルコマンドを実行し、リベースを行う」を参考にしてください。