2017-03-24 10 views
2

私は、機能1、機能2、およびいくつかの修正を含む開発ブランチを持っています。別の開発者のために、私たちは開発から別のブランチを作成したいと思って、そのブランチのフィーチャー1とフィーチャー2を除いて、修正だけを必要としました。そこで、フィーチャー1と2のコミットを作成して元に戻します。今、私たちはその新しいブランチでいくつかの開発を行いました。今私は、このブランチを開発ブランチとマージしたいと思っています。しかし、開発ブランチには1と2の機能が必要です。しかし、マージすれば、機能1と2のコミットは開発から削除されます。Git復帰コミットのマージとアンセット

だから、gitでそれに取り組むための最良の方法は何ですか。 1つのアプローチは、フィーチャー1とフィーチャー2の変更を取得し、マージされた開発ブランチにパッチとして適用することです。しかし、これらの2つの機能にはいくつかの変更があります。

答えて

2

developから分岐したときの最初のことは、2つのフィーチャコミットを元に戻した後で、実際に開発作業を行ったと仮定します。これが当てはまらない場合は、自分の状況を解決するためにいくつかの追加手順を実行する必要がありますが、私の答えはまだ役立つはずです。

おそらく、あなたの問題を概念的に最も簡単な解決策は、単に非復帰がdevelopに新しいブランチからコミットチェリー選ぶには、次のようになります。

git checkout develop 
git cherry-pick B^..D 

のハッシュをコミットSHA-1でBDを交換してください新しいブランチからdevelopに持ち帰りたいとコミットします。別のベースに作業を再適用しているので、これとマージの競合が発生する可能性があることに注意してください。

さらに冒険的な気持ちがある場合は、git rebase --ontoを試してみることもできます。ここにあなたの新しいブランチとdevelopの現在の状態を示した図である。

develop ... ---A---B---C 
        \ 
newbranch   R1---R2---D---E 

そして、あなたはこれらR1R2復帰を無視して、developの上newbranchからDEコミットをプレイしたいと思いますコミットします。言い換えれば、あなたはこれで終わるしたい:

develop ... ---A---B---C---D'---E' 
        \ 
newbranch   R1---R2---D---E 

あなたはこれを達成するために、次のコマンドを使用することができます。

git checkout develop 
git rebase --onto C R2 E 

ontoコマンドは、ベースとしてCを取り、すべて再生すると言います親がR2(ただし、R2自身は含まず)までのコミットEをコミットします。 CHEADdevelopと一致しているので、GitにDEという順番で、最後にdevelopの順番で再生を依頼しています。

あなたはGitリポジトリのrebase --ontoの優れた説明をしたい場合は、私はここに@Enricoによって与えられた答えを読むことをお勧めします:

I can't understand the behaviour of git rebase --onto

関連する問題