28

branch の機能に取り組んでいるとしますoldFeature。私はコミットAB1行い、コードレビューのために送信しました。で、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ためHEADCに移動できません。DE

次の回避策を実行できることを知っています。

次に、次のような状況になります。

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 を使用しています。

4

1 に答える 1

24

rebase interactiveを実行できます:

git checkout new_feature
git rebase --interactive old_feature

そして drop B1: B1 で行を削除するだけです:

# If you remove a line here THAT COMMIT WILL BE LOST
于 2013-01-29T18:55:35.643 に答える