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