web-dev-qa-db-ja.com

誤って間違ったブランチから分岐し、マスターにマージしたい場合、両方のブランチをマージする必要があります

そのため、すでに作成している別のブランチからブランチを作成し、ブランチをマスターにマージしようとすると、両方のブランチをマージしなければならない状況に遭遇しました。

ここに図があります

マスター->

 ->Branch 1  -> Branch 2

理にかなっている場合は、ブランチ1の変更をマージせずに、ブランチ2の変更だけをマスターにマージできるようにしたいと考えています。私はリセットと復帰を調べましたが、これらのものはブランチ2で行ったすべての変更を削除するようです。

ありがとう

48
Levi S

次の構文でgit rebase --ontoを試してください:

Branch1を含めずにBranch2の変更をマスターに適用するには

git rebase --onto master branch1 branch2

git help rebaseからの関連出力:

あるブランチに基づいてトピックブランチを別のブランチに移植し、rebase --ontoを使用して、後者のブランチからトピックブランチを分岐したふりをする方法を次に示します。

最初に、topicがブランチnextに基づいていると仮定します。たとえば、topicで開発された機能は、nextにあるいくつかの機能に依存します。

              o---o---o---o---o  master
                   \
                    o---o---o---o---o  next
                                     \
                                      o---o---o  topic

topicをブランチから分岐させたいmaster;たとえば、topicが依存する機能がより安定したmasterブランチにマージされたためです。ツリーを次のようにしたいとします。

              o---o---o---o---o  master
                  |            \
                  |             o'--o'--o'  topic
                   \
                    o---o---o---o---o  next

これは、次のコマンドを使用して取得できます。

git rebase --onto master next topic

ここで言及されているリベースのリスクと落とし穴に注意してください: http://git-scm.com/book/en/Git-Branching-Rebasing

71
somesh

これを行う1つの方法は、cherry-pickを使用することです。 git log branch2を実行し、必要なコミットIDを見つけて、git checkout masterを使用してmasterブランチに切り替え、次にgit cherry-pick <commit_id>を使用します

詳細については、この投稿を参照してください

Gitで特定のコミットをマージする方法

9
user376507