トピックソリューション
投稿された質問に答えるための正しいコマンドは、次のいずれかです(ブランチtopic
が既にチェックアウトされていると想定)。
git rebase --onto B master
git rebase --onto master~1 master
git rebase --onto B A
git rebase --onto B C
git rebase --onto B
topic
がチェックアウトされていない場合は、次のtopic
ようにコマンドに追加します(最後のコマンドを除く)。
git rebase --onto B master topic
または、最初にブランチをチェックアウトします。
git checkout topic
コミット文字列をターゲットコミットにリベース
ドキュメントから引用した、必要なコマンドの基本的な形式は次のとおりです。
git rebase --onto <Target> [<Upstream> [<Branch>]]
<Branch>
オプションであり、コマンドの残りの部分を実行する前に、指定されたブランチをチェックアウトするだけです。リベースするブランチをすでにチェックアウトしている場合は、これは必要ありません。指定<Upstream>
するために指定する必要があることに注意してください。<Branch>
そうしないと、gitが指定していると見なし<Upstream>
ます。
<Target>
コミットの文字列をアタッチするコミットです。ブランチ名を指定するときは、そのブランチのヘッドコミットを指定するだけです。<Target>
移動するコミットの文字列に含まれない任意のコミットを指定できます。例えば:
A --- B --- C --- D master
\
\-- X --- Y --- Z feature
全体の機能ブランチを移動し、あなたが選択することができないためにX
、Y
、Z
、またはfeature
として<Target>
それらがすべて移動してグループ内のコミットされているからです。
<Upstream>
これは2つの異なることを意味するため、特別です。チェックアウトされたブランチの祖先であるコミットの場合、それはカットポイントとして機能します。私は提供された例では、これがないものだろうC
、D
またはmaster
。<Upstream>
チェックアウトされたブランチの先頭までのすべてのコミットが移動されます。
ただし、<Upstream>
が祖先でない場合、gitは指定されたコミットからチェーンをバックアップし、チェックアウトされたブランチで共通の祖先が見つかるまで(そして、見つからない場合は中止します)。私たちの場合は、<Upstream>
のB
、C
、D
、またはmaster
すべてのコミットになりますB
カット点となります。<Upstream>
それ自体はオプションのコマンドであり、指定されていない場合、gitはと入力するのと同じですが、チェックアウトされたブランチの親を調べますmaster
。
gitが切り取り、移動するコミットを選択したので、<Target>
ターゲットにすでに適用されているコミットをスキップして、に適用します。
興味深い例と結果
この開始点を使用:
A --- B --- C --- D --- E master
\
\-- X --- Y --- Z feature
git checkout B
走る前にやってみましたgit rebase
か?