インタラクティブモードで、自動的にfixup対象のコミットオブジェクトを判別し、リベースを行う
「インタラクティブモード」では、自動的にfixup対象のコミットオブジェクトを判別し、リベースを行うことができます。fixupとは
fixupとは、リベース元の複数の「コミットオブジェクト」の変更内容を、リベース先の1つの「コミットオブジェクト」に取り込むことです。「インタラクティブモード」の「fixup」コマンドを参考にしてください。
fixup対象のコミットオブジェクト
fixup対象の「コミットオブジェクト」は、「コミットタイトル」から自動的に判別されます。「コミットタイトル」が「fixup! 」で始まるリベース元の「コミットオブジェクト」は、「fixup! 」を除いた「コミットタイトル」と同じ「コミットタイトル」を持つリベース元の「コミットオブジェクト」にfixupされます。
例えば、あるリベース元の「コミットオブジェクト」の「コミットタイトル」が「BugFix-001」だった場合、「コミットタイトル」が「fixup! BugFix-001」のリベース元の「コミットオブジェクト」は、fixup対象の「コミットオブジェクト」になります。
コマンドの実行例
コマンドの実行例です。1.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。現在のブランチは、「fix」ブランチであることが分かります。
同様に、「HEAD」は「fix」ブランチを指していることが分かります。
ここでは例として、「fix」ブランチを「master」ブランチにリベースし、「mastsr」ブランチに「fix」ブランチの変更内容を結合します。
2.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「fix」ブランチを「master」ブランチにリベースするため、リベース対象の「コミットオブジェクト」は、以下のようになります。
- Commit4
- Commit5
- Commit6
3.コミットタイトルの確認
リベース対象の「コミットオブジェクト」の「コミットタイトル」を表示すると、以下のようになります。4.リベース対象のコミットオブジェクトの情報
リベース対象の「コミットオブジェクト」の情報をまとめると、以下のようになります。コミットオブジェクト | コミットオブジェクトの識別子 | コミットタイトル |
---|---|---|
Commit4 | a7e1f73ecfe9ed0b1361850826c2ea0a96d97c30 | BugFix-001 |
Commit5 | 7ad66df5e4c413f64ad53905c284d183de0829af | BugFix-002 |
Commit6 | 72ddb2cf2668bda62c114a146b2137ccb5c58f6c | fixup! BugFix-001 |
5.コマンドの実行
コマンドのオプションは、以下のオプションを指定します。ショートオプション | ロングオプション |
---|---|
-i | --interactive |
ー | --autosquash |
「端末」から、以下のコマンドを実行します。
コマンドの詳細は、以下を参考にしてください。
ポイントは、赤字の箇所です。
git rebase --verbose --interactive --autosquash master
6.todoリストの編集
以下のようにテキストエディターが起動し、「todoリスト」が表示されます。「Commit6」コミットオブジェクトが、fixup対象の「コミットオブジェクト」になっています。
「Commit6」コミットオブジェクトの変更内容は、「Commit4」コミットオブジェクトのリベース時に取り込まれます。
7.リベースの続行
「todoリスト」に従い、リベースが行われます。8.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。「fix」ブランチが指す「コミットオブジェクト」の識別子が、「1.」と異なっています。
9.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「Commit4」と「Commit6」の変更内容を元に、「Commit4’」が新規に生成されています。
「Commit5」の変更内容を元に、「Commit5’」が新規に生成されています。
10.コミットタイトルの確認
リベースされた「コミットオブジェクト」の「コミットタイトル」を表示すると、以下のようになります。上から以下の順番で「コミットタイトル」を表示しています。
- Commit5’
- Commit4’
- Commit3