2012-03-29 12 views
9

私は 'master'ブランチといくつかのトピックブランチを持っています。主にブランチがリリース候補として使用され、このブランチで開発作業が行われないと仮定します。スカッシュマージ後リベース?

トピックブランチはいくつかあり、チームによって共有されています。いくつかの支店には複数の開発者が働いています。すべてのトピックブランチは、マスターブランチから定期的にリベースされます。

'master'ブランチで履歴をクリーンアップするには、トピックからマスターブランチにコードをマージするときに 'git merge --squash'を実行しました。これは完璧にうまくいった。

今、トピックブランチがリベースされると、コミットが重複しています。 'git merge --squash'が成功した後、トピックブランチ上のコミットをクリーンアップする方法はありますか?

+0

ケース内で完全に正常に動作しません[削除されたファイル]の(http://stackoverflow.com/a/14343784/281545)。多分行く方法ではない - [ここ](http://stackoverflow.com/questions/1464642/git-merge-squash-repeatedly)を参照してください –

答えて

7

では、次のシナリオを持っていると仮定しましょう:

A - B - C (master) 
\ 
    D - E (topic) 

あなたはFがDとEからのすべての変更が含まれてい

A - B - C - F (master) 
\ 
    D - E (topic) 

のようなものを取得します--squashでマスターにトピックをマージした場合トピックブランチがすでにマスターになっているので(Fを介して)、マスターのトピックをリベースすることは意味をなさない。リベースする代わりに、トピックブランチをFに移動することができます。

git checkout master 
git branch -f topic F 

A - B - C - F (master/topic) 

をあなたが今やらなければならないことは、移動トピックブランチをプッシュすることです:

git push -f origin topic 
+0

ありがとう!それはまさに私が必要としたことです。 – mustard

+0

スカッシュには注意してください。 - Fにトピックブランチで削除したファイルが含まれている可能性があります。http://stackoverflow.com/a/14343784/281545 –

3

私はちょうどカップルとマグナスと同じことを行うために使用されますその他のコマンド:

git checkout master 
git merge --squash topic 
git commit -m "Add topic feature" 

git branch -D topic 
git checkout -b topic 

git push -f origin topic 
関連する問題