2016-05-12 5 views
2

これは大きなものです。私は以下に述べるようにブランチ変更ブランチを作成しました。私はこのブランチに1.3.6と1.4.1の変更をマージする必要があります。問題は、変更を選択的にマージすることです。私は1.3.6からのすべての変更をchange-branchにしたくありません。これについてどうやって行くのですか? 、--no-commitフラグを付けてmergeコマンドを使用してmergerevertを使用して、選択rebase、またはcherry-pickを使用して:どのようにしてコミット履歴を失うことなくマージできますか?

これはあなたが4つの方法を持っている構造

master 
|- track1 
|- track2 
|---|- msr-657 
|---|---|--1.4.1 
|---|---|--change-branch 
|- track3 
|---|-- 1.3.6 
+1

「cherry-pick」の仕事のように聞こえます。 – isherwood

+0

ありがとうございます@isherwood –

答えて

1

です。

--no-commitとのマージはおそらく履歴を保存するのに最適ですが、コミットする前に手動で変更をロールバックする必要があるため、もっとうまくいくでしょう。

もう1つのオプションはmergeです。その後、を使用して、選択的にrevertが変更されます。しかし、これは歴史をより厄介にするだけです。

履歴が「純粋」であることを気にしない場合は、単にrebaseを使用することができますが、これは一般的なレポに変更をまだプッシュしていない場合にのみ有効です(他のユーザーと作業している場合)またはあなたはスローアウェイブランチからリベースを行います。あなたはこのような何かをするだろう:

git rebase --interactive master 1.3.6 

これでしょうrebaseあなた1.3.6からマスターへの変更が、最初のあなたは、キープ編集、または無視することをコミットするかを選択しましょうでしょう。私はそれがrebaseからやっているブランチを削除すると確信しているので、rebaseの前に1.3.6と同じ場所に別のスロー・ブランチを作ってから、masterをスロー・アウェイ・ブランチと同じコミットにしてください最後に、スローアウェイブランチを削除します。

cherry-pickを使用すると、両方の親を明示的に覚えていなくても、コミットを選択的にマージできます。 1.3.6ブランチが元のリポジトリに保存されている場合は、まだどこかに履歴が残っているため、マージペアレントを持たないことは大したことではありません。また、cherry-pickはその説明のコミット番号を自動的に参照できます。これは選択的なrebaseのような不都合な履歴を作成します。

最終的には、1.3.6ブランチを保持しているかどうか、最終的に履歴を表示する方法によって異なります。

2

git cherry-pickは最も簡単です。 git cherry-pick現在のHEADにコミットすることができます。あなたも

のgitも仕事をするのに十分強力であるリベースBにAの子からすべてのコミットを選ぶ桜にgitの桜ピックA..Bを試すことができますが、それは少しトリッキーと紛らわしいです。

関連する問題