はじめに
Git で作業していると、作成したコミットを間違ったブランチで作成してしまったり、特定のコミット群を別のブランチに移動させたい、といった状況に遭遇したことはありませんか?そんな時に役に立つのが, git rebase --onto
です.
この記事では、git rebase --onto
がどのようなコマンドで、どのようにコミットを別のブランチに移動させるのか、具体的な使用例を交えて詳しく解説します。
git rebase --onto
とは?
git rebase
は、一連のコミットを別のブランチに「再適用」するためのコマンドです。そして、--onto
オプションは、この再適用の「移動先」をより詳細に指定できる機能を提供します。
基本的な構文は以下のようになります。
git rebase --onto <新しいベース> <移動したいコミットの開始地点> <移動したいブランチ>
それぞれの引数は次の意味を持ちます。
-
<新しいベース>
: コミットを再適用する新しい基点となるコミットまたはブランチ。 -
<移動したいコミットの開始地点>
: 再適用したいコミット群の「直前のコミット」。このコミット自体は移動されません。 -
<移動したいブランチ>
: 移動したいコミットが含まれるブランチ。通常は現在のブランチを指定します。
このコマンドは、<移動したいコミットの開始地点>
から <移動したいブランチ>
までのコミットを切り取り、それらを <新しいベース>
の上に貼り付ける、というイメージです。
注意点とヒント
- コンフリクト: コミット先を移動するためコンフリクトが起きる可能性があります。
-
強制プッシュ: 既に共有リポジトリにプッシュ済みのコミットに対して
rebase
を行うと、履歴が書き換わるため、他の開発者との間で問題が発生する可能性があります。このような場合は、git push --force-with-lease
またはgit push --force
が必要になりますが、チームメンバーと十分な連携をとってから実行してください。 -
コミットハッシュの変更:
rebase
はコミットを「再作成」するため、移動したコミットのハッシュ値は変更されます。 -
git reflog
の活用:rebase
を実行して意図しない状態になってしまった場合でも、git reflog
コマンドを使用すると、過去のHEADの移動履歴を確認し、元の状態に戻すことができます。