HOWTO · Git

Git で特定のコミットにリベースする

Git の特定のコミットに対して git rebase を実行できます。

この記事では、Git で特定のコミットにリベースするプロセスについて説明します。 これを実現する方法を説明するために、いくつかのシナリオを使用します。

git rebase --onto コマンドを使用して、ブランチを特定のコミットにリベースします。 すぐに飛び込みましょう。

Git で特定のコミットにリベースする

ブランチを別のブランチにリベースしてコミットを指定する必要がある場合は、--onto フラグを使用します。

基本的な構文:

git rebase –onto <new-parent> <old-parent> <head-of-new-parent>

シナリオの例を見てみましょう。

使用する基本的なワークフローは次のとおりです。

以前のコミットへの Git リベース - 基本的なワークフロー

main の特定のコミットに new-feature をリベースする

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

git log <branch-name> を使用して、コミットのハッシュを取得できます。

特定のコミットへの Git リベース - ワークフロー

私たちの場合、new-feature ブランチのコミットを main ブランチの 846e2fa コミット (最後から 2 番目) に移動したいと考えています。 以下を実行します。

$ git rebase –onto 846e2fa bd9172c

上記のコマンドには、以下に示す効果があります。

特定のコミットへの Git リベース - 出力

new-feature 全体を移動したかったので、コマンドに 3 番目の引数は必要ありません。 3 番目の引数を省略した場合、Git はデフォルトでブランチ全体を移動します。

new-featuremain の特定のコミットにリベースし、new-feature の最初のコミットを削除する

e2ff2bc が依存関係であり、コミット 846e2fa でブランチを main に移動したいとします。これは、同じ依存関係です。 簡単に言うと、new-featuremain846e2fa にリベースし、new-feature の最初のコミットを省略したいと考えています。

特定のコミットへの Git リベースと最初のコミットの削除 - ワークフロー

方法は次のとおりです。

$ git rebase –onto 846e2fa e2ff2bc

上記のコマンドには、以下に示す効果があります。

特定のコミットへの Git リベースと最初のコミットの削除 - 出力

git rebase -onto コマンドは、親コミットを参照として受け取ります。 簡単に言えば、保存したいコミットの前にコミットを参照することになっています。

new-featuremain の特定のコミットにリベースし、new-feature の最後のコミットを削除する

new-feature846e2fa に移動したいが、new-feature のコミット d7dbeb を省略したいとしましょう。 これについてはどうすればよいでしょうか?

Git を特定のコミットにリベースし、最後のコミットを削除する - ワークフロー

ここで 3 番目の引数の出番です。以下を実行します。

$ git rebase –onto 846e2fa bd9172c 730f163

これにより、次のようになります。

特定のコミットへの Git リベースと最後のコミットの削除 - 出力

3 番目の引数は、新しい親コミットの HEAD のみを指します。 この場合、730f163 があります。 これにより、コミットとその後のすべてのコミットが削除されます。

簡単に言えば、Git を使用すると、ブランチを特定のコミットにリベースできます。 git rebase -onto コマンドは、リベース時に 3つの引数を受け入れます。

3 番目の引数が新しい親コミットを指示することを常に覚えておいてください。