git rebase --ontoで派生元ブランチを変更する方法
間違ったブランチから作業ブランチを作ってしまった経験はありませんか?git rebase --ontoを使えば、作業内容を失わずにブランチの派生元を変更できます。この記事では、コマンドの意味から具体的な実行手順、注意点まで解説します。
この記事のまとめ
git rebase --ontoは、間違ったブランチから派生した作業ブランチを、正しい元ブランチに付け替けるコマンドです。コミット履歴を保ったまま安全に操作でき、リベース初心者でも理解しやすい構文を持っています。
git rebase --onto <newbase> <upstream> <branch>の各パラメータの意味- 間違ったブランチから派生したブランチを付け替える具体的な手順
この記事の情報源
この記事は、以下の情報源に基づいています。重要な判断をする際は、必ずこれらを直接ご確認ください。
- この記事のまとめ
- この記事の情報源
- git rebase —ontoとは?
- git rebase —ontoのコマンド構文とパラメータの意味
- 派生元ブランチを変更する実例
- git rebase —ontoの実行手順
- 注意点とリスク管理
- よくある質問
git rebase —ontoとは?
git rebase --ontoは、ブランチを別のベースポイントに付け替えるコマンドです。公式ドキュメントでは「Reapply commits on top of another base tip(別のベース先端の上にコミットを再適用する)」と定義されています。
定義:ブランチを別のベースポイントに付け替える
git rebase --ontoは、コミットシリーズを異なる起点から再適用するコマンドです。これにより、ブランチの派生元を変更できます。
間違ったブランチから作業ブランチを作成してしまった場合、このコマンドを使えば作業内容を保ったまま、正しいブランチに付け替えることができます。
通常のgit rebaseとの違い
通常のgit rebaseとgit rebase --ontoの主な違いは、派生元を自由に変更できる点です。
項目
—onto なし
—onto あり
開始点
<upstream>
<newbase>(異なる可能性)
用途
リモートの最新に追いつく
ブランチの派生元を変更
実行形式
git rebase <upstream>
git rebase --onto <newbase> <upstream> <branch>
通常のgit rebaseは作業ブランチのリモートの最新状態に追いつくために使いますが、--ontoオプションを使えば、新しい派生元を明示的に指定できます。
git rebase —ontoのコマンド構文とパラメータの意味
git rebase --ontoの基本構文は以下の通りです。
git rebase --onto <newbase> <upstream> <branch>
基本構文の全体像
このコマンドは3つのパラメータを受け取ります。
<newbase>: 新しい派生元(どこに付け替えるか)<upstream>: 古い派生元(どこから分離するか)<branch>: 作業ブランチ(何を移動するか)
各パラメータの意味
各パラメータが何を意味するか、詳しく見ていきます。
<newbase> - 新しい派生元
新しいコミットの作成開始点です。
「どこに付け替えるか」を指定するパラメータです。
<upstream> - 古い派生元
比較対象となる上流ブランチです。
「どこから分離するか」を指定するパラメータです。
<branch> - 移動する作業ブランチ
作業ブランチです。デフォルトは HEAD です。
「何を移動するか」を指定するパラメータです。
コマンド例
たとえば、git rebase --onto to from targetというコマンドは、以下を意味します。
targetブランチを(何を)fromブランチから分離して(どこから)toブランチに付け替える(どこに)
派生元ブランチを変更する実例
公式ドキュメントの図解を使って、具体的なブランチ付け替えの例を見ていきます。
シナリオ:targetブランチをfromからtoに付け替える
targetブランチが間違ってfromブランチから派生してしまったケースです。これをtoに直接付け替えます。
変更前の状態
o---o---o---o---o to
\
o---o---o---o---o from
\
o---o---o target
この状態では、targetブランチはfromブランチから派生しています。
実行コマンド
git rebase --onto to from target
このコマンドで、targetブランチをfromからtoに付け替えます。
変更後の状態
o---o---o---o---o to
| \
| o'--o'--o' target
\
o---o---o---o---o from
targetブランチがtoから直接派生するように変更されました。コミット履歴は保たれたまま、派生元だけが変更されています。
git rebase —ontoの実行手順
実際にコマンドを実行する際の手順を、ステップごとに解説します。
ステップ1:現在の状態を確認する
まず、現在のブランチ構造を確認します。
git branch
このコマンドで、現在どのブランチにいるか、どのブランチが存在するかを確認できます。
ステップ2:git rebase —ontoを実行する
ブランチの状態を確認したら、git rebase --ontoを実行します。
git rebase --onto <newbase> <upstream> <branch>
各パラメータに、実際のブランチ名を指定します。
たとえば、targetブランチをfromからtoに付け替える場合は以下のようになります。
git rebase --onto to from target
ステップ3:実行後の状態を確認する
rebaseが完了したら、ブランチの状態を確認します。
git branch
ブランチが正しく付け替えられたことを確認してください。
注意点とリスク管理
git rebase --ontoを安全に実行するための注意点と、失敗時の対処法を解説します。
パラメータの順序に注意
<newbase>と<upstream>パラメータは必須です。混同すると意図しない結果になります。
順序は必ず以下の通りにしてください。
git rebase --onto <newbase> <upstream> <branch>
1番目が「どこに」、2番目が「どこから」、3番目が「何を」です。
共有ブランチでのrebaseは避ける
Git公式ドキュメントでは、以下のように警告しています。
Rebasing (or any other form of rewriting) a branch that others have based work on is a bad idea
他の人が作業の基礎にしているブランチをrebaseするのは避けてください。
共有ブランチでrebaseを実行すると、他の開発者の作業に影響を与える可能性があります。
よくある質問
間違ったブランチから作業ブランチを作ってしまったのですが、作業内容を失わずに修正できますか?
はい、git rebase --ontoを使えば、作業内容(コミット履歴)を保ったまま、ブランチの派生元だけを変更できます。コマンドはgit rebase --onto <正しい元> <間違った元> <作業ブランチ>です。
git rebase —ontoを実行して失敗した場合、元に戻せますか?
はい、git rebase --abortコマンドでrebase操作を中止し、rebase開始前の状態に戻すことができます。
通常のgit rebaseとgit rebase —ontoの違いは何ですか?
通常のgit rebaseは上流ブランチの最新に追いつくために使いますが、git rebase --ontoは派生元を自由に変更できる点が異なります。--ontoでは新しい派生元を明示的に指定できます。