2010-12-28 12 views
6

私はgitに2つの枝を持っています。ワンステップで複雑なインタラクティブなリベース

* fffffff commit f 
* ddddddd commit d 
* bbbbbbb commit b 
| * eeeeeee commit e 
| * ccccccc commit c 
| * aaaaaaa commit a 
|/ 
* 2222222 base revision 2 
* 1111111 base revision 1 

rebase -interactiveのようにコミットを再配置して並べ替える必要があります。しかし、私はコミットのいくつかをインターリーブし、このような形で巻き上げたいと思います。

* ffffff2 commit f 
* eeeeee2 commit e 
* dddddd2 commit d 
* cccccc2 commit c 
* bbbbbb2 commit b 
* aaaaaaa commit a 
* 2222222 base revision 2 
* 1111111 base revision 1 

ワンステップでこのリベースを行う方法はありますか?私はコミットeの上にコミットbをリベースし、次にすべてのコミットをソートするために2つ目のインタラクティブなリベースを行い、2つのステップでそれを試みました。問題は、(コミットbとコミットeの間の)マージ競合が発生していることです。コミットaの後にコミットbを置くことで、それ以外の場合は表示されず、競合を解決する価値はありません。

答えて

8

いずれかの枝とスタート(どちらかBranchWithFまたはBranchWithE)とインタラクティブなリベースを発行し、例えば

 
git checkout BranchWithF 
git rebase -i HEAD~3 

エディタとコミットリストがポップアップ表示され、追加(読み:上の入力あなたのキーボード...)とインターリーブ

 
pick aaaaaaa 
pick ccccccc 
pick eeeeeee 

あなたが当てはまるように。その後

BranchWithFはすべて6つのコミットをしています、あなたは離れて(まだ3つのコミットを持っている)BranchWithEを投げることができます。

+0

うわー、完璧!インタラクティブなリベース中に行を追加することはできませんでした。私はあなたがここで信用を得るべきであるという似たような質問がありました:http://stackoverflow.com/questions/3251011/can-i-rebase-and-squash-commits-at-the-same-time –

+0

答えがそこに掲載されました。 – user502515