HOWTO · Git
Git で特定のコミットにリベースする
Git の特定のコミットに対して git rebase を実行できます。
この記事では、Git で特定のコミットにリベースするプロセスについて説明します。 これを実現する方法を説明するために、いくつかのシナリオを使用します。
git rebase --onto コマンドを使用して、ブランチを特定のコミットにリベースします。 すぐに飛び込みましょう。
Git で特定のコミットにリベースする
ブランチを別のブランチにリベースしてコミットを指定する必要がある場合は、--onto フラグを使用します。
基本的な構文:
git rebase –onto <new-parent> <old-parent> <head-of-new-parent>
シナリオの例を見てみましょう。
使用する基本的なワークフローは次のとおりです。

main の特定のコミットに new-feature をリベースする
最初のシナリオでは、ブランチ全体をリベースせずに main でコミットを使用したいと想定しています。 これには、実行中のコミットの SHA-1 に注意する必要があります。
git log <branch-name> を使用して、コミットのハッシュを取得できます。

私たちの場合、new-feature ブランチのコミットを main ブランチの 846e2fa コミット (最後から 2 番目) に移動したいと考えています。 以下を実行します。
$ git rebase –onto 846e2fa bd9172c
上記のコマンドには、以下に示す効果があります。

new-feature 全体を移動したかったので、コマンドに 3 番目の引数は必要ありません。 3 番目の引数を省略した場合、Git はデフォルトでブランチ全体を移動します。
new-feature を main の特定のコミットにリベースし、new-feature の最初のコミットを削除する
e2ff2bc が依存関係であり、コミット 846e2fa でブランチを main に移動したいとします。これは、同じ依存関係です。 簡単に言うと、new-feature を main の 846e2fa にリベースし、new-feature の最初のコミットを省略したいと考えています。

方法は次のとおりです。
$ git rebase –onto 846e2fa e2ff2bc
上記のコマンドには、以下に示す効果があります。

git rebase -onto コマンドは、親コミットを参照として受け取ります。 簡単に言えば、保存したいコミットの前にコミットを参照することになっています。
new-feature を main の特定のコミットにリベースし、new-feature の最後のコミットを削除する
new-feature を 846e2fa に移動したいが、new-feature のコミット d7dbeb を省略したいとしましょう。 これについてはどうすればよいでしょうか?

ここで 3 番目の引数の出番です。以下を実行します。
$ git rebase –onto 846e2fa bd9172c 730f163
これにより、次のようになります。

3 番目の引数は、新しい親コミットの HEAD のみを指します。 この場合、730f163 があります。 これにより、コミットとその後のすべてのコミットが削除されます。
簡単に言えば、Git を使用すると、ブランチを特定のコミットにリベースできます。 git rebase -onto コマンドは、リベース時に 3つの引数を受け入れます。
3 番目の引数が新しい親コミットを指示することを常に覚えておいてください。