branch の機能に取り組んでいるとしますoldFeature。私はコミットAをB1行い、コードレビューのために送信しました。で、B1いくつかの既存のファイルを変更しましたが、newfile.txt.
その間、 ( == )newFeatureから分岐したブランチで作業を開始しました。、、を追加しました。oldFeatureHEADB1CDE
その間、コード レビューの結果が得られ、既存のファイルの一部を修正B1、変更、および変更する必要がありました。newfile.txt修正後、になりましB2た。
それを説明するために:
newFeature oldFeature
A A
B1 B2 [B1 with some fixes]
C
D
E
今私は入っていて、の代わりに持つようnewFeatureにリベースしたいと思っています。単純にリベースを実行すると、リベースの両方の部分に追加されるため、リベースの競合が発生します。newFeatureB2B1newfile.txt
oldFeature( )からのバージョンを保持したいB2。
に依存しているB1ためHEAD、Cに移動できません。DE
次の回避策を実行できることを知っています。
git checkout --theirsgit add- リベースを続ける
次に、次のような状況になります。
newFeature oldFeature
A A
B2 B2
BX
C
D
E
whereは、 に存在していたファイルのBX多かれ少なかれです。これで、インタラクティブなリベースと削除を行うことができます。B2\B1ABX
ただし、私の回避策は複雑です。それを行う簡単な方法はありますか?簡単に言えば、私はどちらかを持っているということです
newFeature oldFeature
A A
B2 B2
B2\B1
C
D
E
リベースの競合なしで、そのコミットを取り除くB2\B1か、それらを自動的に置き換えることができるので、
newFeature oldFeature
A A
B2 B2
C
D
E
Git 1.8.0 を使用しています。