インタラクティブモードで、差分適用後にリベースを中断する
「インタラクティブモード」では、差分適用後及びコミットした後にリベースを中断し、差分が適用されたファイルの確認やファイルの編集などを行うことができます。ここでは、以下の流れで紹介します。
- リベースの中断
- ユーザーによる新規コミット
- リベースの続行
1.リベースの中断
まずは、リベースの中断まで作業を行います。1-1.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。現在のブランチは、「fix」ブランチであることが分かります。
同様に、「HEAD」は「fix」ブランチを指していることが分かります。
1-2.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。ここでは例として、「fix」ブランチを「master」ブランチにリベースし、「mastsr」ブランチに「fix」ブランチの変更内容を結合します。
ただし「todoリスト」で「Commit4」の後に別のコミットを行い、続いて「Commit5」を「master」ブランチにリベースします。
「fix」ブランチを「master」ブランチにリベースするため、リベース対象の「コミットオブジェクト」は、以下のようになります。
コミットオブジェクト | コミットオブジェクトの識別子 |
---|---|
Commit4 | b3558792781286ca90af046c9318dd9072fe9014 |
Commit5 | a1818429356c581418812fdbaeec830178ca2ec8 |
1-3.コマンドの実行
コマンドのオプションは、以下のオプションを指定します。ショートオプション | ロングオプション |
---|---|
-i | --interactive |
「端末」から、以下のコマンドを実行します。
コマンドの詳細は、以下を参考にしてください。
ポイントは、赤字の箇所です。
git rebase --verbose --interactive master
1-4.todoリストの編集
以下のようにテキストエディターが起動し、「todoリスト」が表示されます。現状、「Commit4」と「Commit5」コミットオブジェクトが、リベース対象のコミットオブジェクトになっています。
ここでは例として、「Commit4」適用後にリベースを中断します。
「todoリスト」に記述するコマンドは、以下のコマンドを記述します。
ショート | ロング |
---|---|
e | edit |
1-5.todoリストの編集完了
以下のように「todoリスト」を編集しました。「todoリスト」の編集が終わったら、ファイルを上書き保存して、テキストエディターを終了します。
1-6.リベースの実行と中断
以下のように「todoリスト」の記述内容に従って、リベースが行われます。「Commit4」をリベースした後、リベースが中断します。
1-7.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。「HEAD」が指す「コミットオブジェクト」の識別子が、「1-1.」と異なっています。
また、「HEAD」が「分離したHEAD」になっています。
この「HEAD」は、「Commit4’」を指しています。
1-8.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「Commit4」の変更内容を元に、「Commit4’」が新規に生成されています。
1-9.ワーキングディレクトリーの状態
「ワーキングディレクトリー」の状態を見てみると、以下のようになっています。「ワーキングディレクトリー」はクリーンですが、リベースが中断されている状態です。
2.ユーザーによる新規コミット
現状リベースが中断されている状態ですが、リベースを続行する前にユーザーは新規にコミットを行うなど、操作が可能です。2-1.ファイルの編集
ここでは例として、「ワーキングディレクトリー」にある「fix.txt」ファイルを編集しました。「ワーキングディレクトリー」の状態を見てみると、以下のように「fix.txt」ファイルが変更されたファイルとして認識されています。
2-2.コミットの実行
「端末」から以下のコマンドを実行し、コミットを行います。
git commit -a -m myfix
2-3.コミット完了
以下のように、コミットが行われます。2-4.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。「HEAD」が指す「コミットオブジェクト」の識別子が、「1-8.」と異なっています。
この「HEAD」は、「Commit6」を指しています。
2-5.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「Commit6」が、今回のコミットで生成された「コミットオブジェクト」です。
今回のコミットで「Commit4’」を「Commit6」で置き換えたいなら、amendでコミットを実行すればよいです。
2-6.ワーキングディレクトリーの状態
「ワーキングディレクトリー」の状態を見てみると、以下のようになっています。「ワーキングディレクトリー」はクリーンですが、リベースが中断されている状態です。
3.リベースの続行
リベースを続行します。ここではリベースを続行しますが、リベースを中止してリベース前の状態に戻すことも可能です。
3-1.リベースの続行
「端末」から以下のコマンドを実行し、リベースを続行します。
git rebase --continue
3-2.リベース完了
「Commt4」までリベースが完了しているため、次のリベース対象のコミットオブジェクトである「Commit5」からリベースが行われます。3-3.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。「HEAD」が「fix」ブランチを指しており、「コミットオブジェクト」の識別子が、「1-1.」と異なっています。
3-4.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「Commit5」の変更内容を元に、「Commit5’」が新規に生成されています。