2013-07-25 9 views
29

gitリポジトリに開発ブランチと機能ブランチがあります。私は開発のコミットを追加しましたが、今はそのコミットを自分のフィーチャーブランチにマージさせたいと思います。私がこれを行うならば、開発分岐のgitコミットを機能ブランチにマージするには

git checkout feature 
git merge develop 

私はマージコミットで終わる。新しいコミットを自分のフィーチャーブランチに頻繁にマージするので、これらの不要なマージコミットをすべて避けたいと思います。私はこのanswergit rebase developを示唆しているのを見ましたが、私の分岐方法を巻き戻しすぎてしまい、リベースが失敗します。

アップデート:私は何をやってしまったことは

git checkout feature 
git merge develop # this creates a merge commit that I don't want 
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want 
git push 

を更新した :私は機能ブランチにリベースその後、マージするとき、私はちょうどオリジナルの開発にコミットしていることに気づいは異なるハッシュを取得します。私はそれが最終的に私は機能を開発に合併し、私はこれがうまく再生されないと思いますので、私が望むものだとは思わない。

+0

ええと、私が知っていることは、ブランチにたくさんコミットされないように、リベースしたときにコミットを「スカッシュ」できることです。 http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.htmlをご覧ください。 – Houdini

+4

Rebasing * is *答えです。あなたにとってうまくいかない場合は、なぜ*動作していないのかを尋ねるべき別の質問があります。 – meagar

答えて

29

1つのブランチを別のブランチに統合するには、マージまたはリベースする必要があります。他の場所で参照されていないコミットをリベースするだけで安全です(他のローカルブランチにマージされず、リモートにプッシュされない)ので、通常はマージする方が良いです。

フィーチャーブランチが純粋にローカルの場合、それを開発の上にリベースすることができます。しかし、リベースがどのように機能するかを理解するには時間がかかります。その前に、誤って重複したコミットを作成するのは簡単です。マージコミットは騒々しいように見えるかもしれませんが、マージは常に安全で予測可能であることが保証されています。

見やすくするために、グラフに一緒にすべてのログを記録してみてください:

git log --all --graph --oneline --decorate 

それはあなたが本当に必要develop上のコミットがfeatureにマージするかどうかを検討するにも価値があります。しばしば、featuredevelopにマージされるまで、別々に残すことができるものです。

developコードがfeatureにある必要があると定期的に確認すると、機能ブランチが長時間実行されている可能性があります。理想的には、機能は、途中で定期的に統合することなく、独立して作業できるように分割する必要があります。

11

あなたは一つだけで、あなたのfeatureブランチでそれを桜選ぶことができますdevelopブランチからコミットしたい場合:

git checkout feature 
git cherry-pick -x <commit-SHA1> 

コミットは、それはdoesnの提供あなたの枝の上部(上の新しいものとして適用されます衝突を起こしません)、featureブランチをマージすると、Gitはそれに対処します。

関連する問題