1. ホーム
  2. git

ブランチの一部だけをリベースする

2023-11-27 21:56:35

質問

2つのブランチ(とmaster)があります。ブランチ 2 はブランチ 1 に基づいており、ブランチ 1 は master に基づいています。私はレビューのためにブランチ1を提出し、それはいくつかの変更を持っていた、私はそれらの変更のいくつかを履歴にリベースし、結果をmasterにマージしました。

今度はブランチ 2 を master の上にリベースして、レビューとマージの準備をする必要があります。

問題は、ブランチ 2 にはまだブランチ 1 のオリジナルのコミットが残っていて、それがもう存在しないため git が混乱してしまうことです。rebase -i でブランチ 1 の元のコミットを削除しようとしましたが、ブランチ 2 のコミットは master-before-branch-1 の上に置かれません。

私が行う必要があるのは、ブランチ2を取り、いくつかのコミットを削除し、単一の操作でmasterの上に残りのコミットだけをリベースすることです。しかし、私はこの2つの操作を2つの異なるステップで行う方法しか知りません。

私のブランチの一部を別のブランチにリベースし、私が指定したもの(例えば HEAD~2 から)以外の共通の先祖に属さないすべてのコミットを削除するにはどうしたらよいでしょうか。

現在の状態がこちらです。

master                     new branch 1
- - - - - - - - - - - | - - - - - - - - -
    \
     \   branch 1
      \ _ _ _ _ _ _ _
                     \
                      \     branch 2
                       \ _ _ _ _ _ _ _

最終的にどうしたいのか

master            new branch 1    
- - - - - - - | - - - - - - - - - -
                                   \
                                    \
                                     \
                                      \    branch 2
                                       - - - - - - - - - 

どのように解決するのですか?

解決方法は、思ったよりずっと簡単です。それは、あなたが供給することができることが判明した -i を指定できることがわかりました (私は履歴を変更するためにブランチを自分自身にリベースするためだけのものだと考えていました)。そこで私は単純に git rebase -i master を実行し、それらの余分なコミットを削除しました。