ファイルの変更内容を異なるブランチに結合する
「git rebase」コマンドは、ファイルの変更内容を異なるブランチや「コミットオブジェクト」に結合するコマンドです。リベースは、ユーザーが行ったコミット作業を再現・再実行することができます。
リベースの基本については、以下を参考にしてください。
- リベースとは・ブランチとブランチを結合するリベースについて
- ブランチとブランチを結合するリベースの基本的な流れ・リベースの中断とマージコンフリクト
- リベース対象のコミットオブジェクを指定したリベースの例
- リベース利用時の注意事項
- リベースがリポジトリーを共有しているユーザーに与える影響の例
- リモートリポジトリーの履歴がリベースにより変わってしまった時は
コマンドのフォーマット
コマンドのフォーマットは以下のようになります。
git rebase <オプション> <コミットオブジェクトの起点> <コミットオブジェクトの終点>
このコマンドの基本的な使い方は、以下を参考にしてください。
- ブランチとブランチをリベースして、ファイルの変更内容を異なるブランチに結合する(簡潔な例)
- ブランチとブランチをリベースして、ファイルの変更内容を異なるブランチに結合する(少し複雑な例)
- 特定のコミットオブジェクトの変更内容を、別のコミットオブジェクトに結合する
- 特定のコミットオブジェクトの繋がりを変更し、履歴を書き換える
- マージコンフリクトを解決して、リベースを続行する
リベースに関するオプション
リベースに関するオプションです。いずれのオプションも省略できます。
リベース先のコミットオブジェクトを指定する(--onto)
リベース先の「コミットオブジェクト」を指定します。このオプションの使用例は、「リベース先のコミットオブジェクトを指定して、リベースを行なう」を参考にしてください。
強制的にリベースを行う(-f, --force-rebase)
リベースを行う必要がない時でも、強制的にリベースを行います。このオプションの使用例は、「リベースを行う必要がない時でも、強制的にリベースを行う」を参考にしてください。
マージコミットを削除せず、マージコミットを再生成する(-p, --preserve-merges)
「マージコミット」を削除せず、「マージコミット」を再生成します。デフォルトでは、リベース元の「マージコミット」は削除され、「コミットオブジェクト」の繋がり(履歴)が一直線になるようにリベースが行われます。
このオプションを指定すると、「マージコミット」を再生成し、リベース元のブランチの分岐構成を引き継ぐようになります。
このオプションの使用例は、「マージコミットを削除せずマージコミットを再生成し、リベースを行う」を参考にしてください。
差分周辺の文字列の一致行数を指定する(-C)
差分周辺の文字列の一致行数を指定します。差分の適用前と適用後の差分周辺の文字列は、このオプションで指定した行数分、文字列が一致していることを保証します。
デフォルトでは、差分周辺の文字列は完全に一致していることを保証します。
このオプションの使用例は、「差分周辺の文字列の一致行数を指定して、リベースを行う」を参考にしてください。
リベースの続行や中止に関するオプション
リベース中断時に使用するオプションです。他のオプションとは併用できません。
リベースを続行する(--continue)
リベースが中断された問題を解決した後、リベースを続行します。このオプションの使用例は、「マージコンフリクトを解決して、リベースを続行する」を参考にしてください。
リベースを中止する(--abort)
リベースを中止し、リベース前の状態に戻します。このオプションの使用例は、「リベース中断時にリベースを中止して、リベース前の状態に戻す」を参考にしてください。
リベースをスキップする(--skip)
リベースが中断される原因になった「コミットオブジェクト」のリベースをスキップしいて、次のリベース対象の「コミットオブジェクト」のリベースに移ります。このオプションの使用例は、「リベースを中断しているコミットオブジェクトのリベースをスキップし、次のコミットオブジェクトからリベースを続行する」を参考にしてください。
共通のコミットオブジェクトの探索に関するオプション
共通のコミットオブジェクトの探索に関するオプションです。いずれのオプションも省略できます。
共通のコミットオブジェクトの探索にreflogを使用する(--no-fork-point)
起点と終点に指定した「コミットオブジェクト」が異なるブランチに属していた場合、共通の「コミットオブジェクト」の探索にreflogを使用します。このオプションの使用例は、以下を参考にしてください。
共通のコミットオブジェクトの探索をにマージベースを使用する(--fork-point)
起点と終点に指定した「コミットオブジェクト」が異なるブランチに属していた場合、共通の「コミットオブジェクト」の探索にマージベースを使用します。このオプションの使用例は、以下を参考にしてください。
到達可能なすべてのコミットオブジェクトをリベース対象にする(--root)
「コミットオブジェクトの終点」に指定した「コミットオブジェクト」から到達可能なすべての「コミットオブジェクト」を、リベース対象にしてリベースを行います。この時コマンドのオプションには、「コミットオブジェクトの終点」を指定します。
「コミットオブジェクトの起点」は指定できません。
このオプションの使用例は、以下を参考にしてください。
- 指定したブランチから新規に履歴を作成する
- リベース先に含まれる同じ変更を除いて、指定したブランチから到達できるすべてのコミットオブジェクトをリベース対象にして、リベースを行う
- ルートコミットオブジェクトが異なるブランチ同士を結合する
pre-rebaseフックに関するオプション
pre-rebaseフックに関するオプションです。いずれのオプションも省略できます。
pre-rebaseフックを有効にする(--verify)
リベース実行時、「pre-rebase」フックを有効にします。デフォルトでは、「pre-rebase」フックは有効です。
このオプションの使用例は、「pre-rebaseフックの有効・無効を指定して、リベースを行う」を参考にしてください。
pre-rebaseフックを無効にする(--no-verify)
リベース実行時、「pre-rebase」フックを無効にします。このオプションの使用例は、「pre-rebaseフックの有効・無効を指定して、リベースを行う」を参考にしてください。
空白文字に関するオプション
空白文字に関するオプションです。いずれのオプションも省略できます。
差分適用時に空白文字を無視する(--ignore-whitespace)
差分適用時に空白文字を無視してリベースを行います。このオプションの使用例は、「差分適用時に空白文字を無視して、リベースを行う」を参考にしてください。
差分適用時に空白文字の警告表示を制御する・差分適用時に空白文字を自動的に修正する(--whitespace)
差分適用時に空白文字の警告表示を制御します。また、差分適用時に空白文字を自動的に修正します。
このオプションの使用例は、「差分適用時の空白文字の警告表示を制御する・差分適用時に空白文字を自動的に修正する」を参考にしてください。
コミットに関するオプション
コミットに関するオプションです。いずれのオプションも省略できます。
空のコミットオブジェクトもコミット対象にする(--keep-empty)
このオプションを指定すると、空の「コミットオブジェクト」もコミット対象にします。このオプションの指定例は、「空のコミットオブジェクトもコミット対象にして、ブランチをリベースする」を参考にしてください。
コミットでPGP署名を行う(-S, --gpg-sign)
コミット実行時、PGP署名を行います。デフォルトでは、「マージコミット」でPGP署名を行いません。
これは、「コミットオブジェクト」に対する署名になります。
このオプションの使用例は、「コミット実行時、PGP署名を行う」を参考にしてください。
コミッターの日付をオーサーの日付に設定する(--committer-date-is-author-date)
リベース先で生成する「コミットオブジェクト」のコミッターの日付を、オーサーの日付に設定します。デフォルトでは、コミッターの日付は、コミットを実行した日付に設定されます。
このオプションの使用例は、「コミッターの日付をオーサーの日付に設定して、リベースを行う」を参考にしてください。
オーサーの日付をコミッターの日付に設定する(--committer-date-is-author-date)
リベース先で生成する「コミットオブジェクト」のオーサーの日付を、コミッターの日付に設定します。デフォルトでは、オーサーの日付は、リベース元の「コミットオブジェクト」のオーサーの日付に設定されます。
このオプションの使用例は、「オーサーの日付をコミッター日付に設定して、リベースを行う」を参考にしてください。
インタラクティブモードに関するオプション
インタラクティブモードに関するオプションです。いずれのオプションも省略できます。
インタラクティブモードでリベースを行う(-i, --interactive)
対話的にリベースを行います。このオプションの使用例は、「対話的にリベースを行うインタラクティブモードとは」を参考にしてください。
todoリストを再編集する(--edit-todo)
リベース中断時に、「todoリスト」の再編集を行います。他のオプションと併用することはできません。
このオプションの使用例は、「インタラクティブモードで、todoリストを再編集してリベースを続行する」を参考にしてください。
自動的にスカッシュを行う(--autosquash)
ある特定の「コミットタイトル」を持つ「コミットオブジェクト」を、関連する「コミットオブジェクト」にスカッシュするようにします。スカッシュとは、リベース元の複数の「コミットオブジェクト」の変更内容を、リベース先の1つの「コミットオブジェクト」に取り込むことです。
「インタラクティブモード」の「squash」コマンドや「fixup」コマンドと同じ動作を行いますが、どの「コミットオブジェクト」をスカッシュ対象にするのかを、自動的に判別します。
このオプションの使用例は、以下を参考にしてください。
自動的にスカッシュを行わない(--no-autosquash)
自動的にスカッシュを行いません。デフォルトでは、自動的にスカッシュは行われません。
このオプションの使用例は、「インタラクティブモードで、自動的なスカッシュを抑制して、リベースを行う」を参考にしてください。
コミットごとに実行するシェルコマンドを指定する(-x, --exec)
リベース先でコミット実行後に実行するシェルコマンドを指定します。リベース先でコミットが行われる度に、ここで指定したシェルコマンドが実行されます。
このオプションの使用例は、「インタラクティブモードで、リベース先でコミットが行われる度にシェルコマンドを実行しながら、リベースを行う」を参考にしてください。
重複しているコミットオブジェクトでも、新規にコミットオブジェクトを生成する(--no-ff)
デフォルトでは、リベース元とリベース先で重複している「コミットオブジェクト」のリベースはスキップされます。このオプションを指定すると、重複している「コミットオブジェクト」でもリベースを行い、リベース先で新規に「コミットオブジェクト」を生成します。
このオプションの使用例は、「インタラクティブモードで、重複しているコミットオブジェクトでも新規にコミットオブジェクトを生成し、リベースを行う」を参考にしてください。
スタッシュに関するオプション
スタッシュ(stash)に関するオプションです。いずれのオプションも省略できます。
スタッシュしてからリベースを行う(--autostash)
リベースを実行する前に、スタッシュします。リベース完了後にスタッシュした内容を適用します。
デフォルトでは、スタッシュは行われません。
このオプションの使用例は、「リベース実行前に編集されたファイルの変更内容を保存し、リベース完了後に編集内容を適用する」を参考にしてください。
マージストラテジーに関するオプション
「マージストラテジー(merge strategy)」に関するオプションです。「リベース」では、「マージストラテジー」の指定による高度なリベースが利用できます。
いずれのオプションも省略できます。
マージストラテジーを使用する(-m, --merge)
「リベース」で「マージストラテジー」を使用します。このオプションの使用例は、「マージストラテジーを使用して、リベースを行う」を参考にしてください。
使用するマージストラテジーを指定する(-s, --strategy)
使用する「マージストラテジー」を指定します。このオプションを指定すると、暗黙のうちに「--merge」オプションも指定されます。
このオプションの使用例は、「使用するマージストラテジーを指定して、リベースを行う」を参考にしてください。
マージストラテジーのオプションを指定する(-X, --strategy-option)
「マージストラテジー」のオプションを指定します。指定できるオプションは、「マージストラテジー」により異なります。
このオプションの使用例は、「使用するマージストラテジーを指定して、リベースを行う」を参考にしてください。
情報の出力に関するオプション
情報の出力に関するオプションです。いずれのオプションも省略できます。
差分を出力する(--stat)
メッセージに差分を出力します。このオプションの使用例は、「メッセージの出力を制御して、リベースを行う」を参考にしてください。
差分を出力する(-n, --no-stat)
メッセージに差分を出力しません。デフォルトでは、メッセージに差分を出力しません。
このオプションの使用例は、「メッセージの出力を制御して、リベースを行う」を参考にしてください。
メッセージの出力を抑制する(-q, --quiet)
リベース実行時に出力されるメッセージを抑制します。「--no-stat」オプションも指定されます。
このオプションの使用例は、「メッセージの出力を制御して、リベースを行う」を参考にしてください。
詳細情報を出力する(-v, --verbose)
リベース実行時に詳細情報を出力します。「--stat」オプションも指定されます。
このオプションの使用例は、「メッセージの出力を制御して、リベースを行う」を参考にしてください。
コミットオブジェクトの起点
リベース対象にする「コミットオブジェクト」の起点を指定します。ここで指定した「コミットオブジェクト」の次の「コミットオブジェクト」から、以下の「コミットオブジェクトの終点」で指定した「コミットオブジェクト」までが、リベースの対象になります。
ただし、起点と終点に指定したコミットオブジェクトが異なるブランチに属している場合、ブランチの分岐点が「コミットオブジェクト」の起点になります。
「コミットオブジェクトの起点」には、以下の指定方法が利用できます。
- ブランチ
- タグ
- コミットオブジェクトの識別子
- HEAD
「ブランチ」を指定するケースが多いでしょう。
1.ブランチ
ブランチヘッドが指す「コミットオブジェクト」を指定します。2.タグ
タグが指す「コミットオブジェクト」を指定します。3.コミットオブジェクトの識別子
直接「コミットオブジェクト」の識別子を指定します。コミットオブジェクトの識別子は、4文字以上の識別子を入力します。
4.HEAD
「HEAD」が指す「コミットオブジェクト」を指定します。リベース先のコミットオブジェクト(--onto)を省略した場合
リベース先のコミットオブジェクト(--onto)を省略した場合、「コミットオブジェクト」の起点がリベース先の「コミットオブジェクト」になります。コミットオブジェクトの終点
リベース対象にする「コミットオブジェクト」の終点を指定します。上記の「コミットオブジェクトの起点」で指定した「コミットオブジェクト」の次の「コミットオブジェクト」から、ここで指定した「コミットオブジェクト」までが、リベースの対象になります。
コミットオブジェクトの終点はブランチで指定する
コミットオブジェクトの終点は「HEAD」もしくはブランチで指定します。「HEAD^」のような指定も可能です。
コミットオブジェクトの終点を省略した場合
「コミットオブジェクト」の終点を省略した場合、「HEAD」が指す「コミットオブジェクト」が指定されます。起点と終点に指定したコミットオブジェクトが異なるブランチに属している場合
起点と終点に指定した「コミットオブジェクト」が異なるブランチに属している場合、ブランチの分岐点が、「コミットオブジェクト」の起点になります。例えば、以下のようなリポジトリーがあるとします。
「fix」ブランチを「master」ブランチにリベースすると、リベース対象の「コミットオブジェクト」は、以下の「コミットオブジェクト」になります。
- Commit4
- Commit5
起点と終点に指定した「コミットオブジェクト」が異なるブランチに属している例は、以下を参考にしてください。
コミットオブジェクトの起点と終点を省略した場合
リベース先のブランチは、「branch.ブランチ名.remote」設定と「branch.ブランチ名.merge」設定から、自動的にリベース先が指定されます。また、「--fork-point」が指定されたものとして扱われます。
コミットオブジェクトの起点と終点を省略した例は、「現在のブランチより後ろにあるリモートトラッキングブランチとリベースする」を参考にしてください。