インタラクティブモードで、重複しているコミットオブジェクトでも新規にコミットオブジェクトを生成し、リベースを行う
「インタラクティブモード」では、重複しているコミットオブジェクトでも新規にコミットオブジェクトを生成し、リベースを行うことができます。非インタラクティブモードで--no-ffオプションを指定した場合
非インタラクティブモードで「--no-ff」オプションを指定した場合、「--force-rebase」オプションと同じ動作になります。「--force-rebase」は、「リベースを行う必要がない時でも、強制的にリベースを行う」を参考にしてください。
1.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。現在のブランチは、「fix」ブランチであることが分かります。
同様に、「HEAD」は「fix」ブランチを指していることが分かります。
2.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。ここでは例として、「Commit2」から「fix」ブランチまでの「コミットオブジェクト」を「Commit1」にリベースします。
リベース対象の「コミットオブジェクト」は、以下のようになります。
コミットオブジェクト | コミットオブジェクトの識別子 |
---|---|
Commit2 | 1435f6869ab8390855ad33f52c641c1e0d93c1b2 |
Commit3 | acb648c5ac895850a1b0c7735f6f7c66eb8d199f |
Commit4 | 7d394d33236d396f4d5939f522e51c94cc2c5c73 |
Commit5 | 06885221ebbc3a49bc6a695b01807e0edf0f1943 |
「Commit1」の識別子は、「2537d065f4f34d5c75093e1091a0ddcd4681c5fe」です。
--no-ffオプションを指定せずリベースしてみる
比較のため、まずは「--no-ff」オプションを指定せずリベースしてみます。3.コマンドの実行
「端末」から、以下のコマンドを実行します。コマンドの詳細は、「ファイルの変更内容を異なるブランチに結合するコマンドの説明」を参考にしてください。
git rebase --verbose --interactive 2537
4.todoリストの編集
以下のようにテキストエディターが起動し、「todoリスト」が表示されます。「todoリスト」の編集が終わったら、ファイルを上書き保存して、テキストエディターを終了します。
5.リベースの実行
以下のように「todoリスト」の記述内容に従って、リベースが行われます。6.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。「fix」ブランチが指す「コミットオブジェクト」の識別子が、「1.」と同じです。
7.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「2.」と同じです。
--no-ffオプションを指定してリベースする
次に「--no-ff」オプションを指定してリベースします。3.コマンドの実行
コマンドのオプションは、以下のオプションを指定します。ショートオプション | ロングオプション |
---|---|
-i | --interactive |
ー | --no-ff |
「端末」から、以下のコマンドを実行します。
コマンドの詳細は、以下を参考にしてください。
ポイントは、赤字の箇所です。
git rebase --verbose --interactive --no-ff 2537
4.todoリストの編集
以下のようにテキストエディターが起動し、「todoリスト」が表示されます。「todoリスト」の編集が終わったら、ファイルを上書き保存して、テキストエディターを終了します。
5.リベースの実行
以下のように「todoリスト」の記述内容に従って、リベースが行われます。6.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。「fix」ブランチが指す「コミットオブジェクト」の識別子が、「1.」と異なっています。
7.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「Commit2」の変更内容を元に、「Commit2’」が新規に生成されています。
「Commit3」の変更内容を元に、「Commit3’」が新規に生成されています。
「Commit4」の変更内容を元に、「Commit4’」が新規に生成されています。
「Commit5」の変更内容を元に、「Commit5’」が新規に生成されています。