2013-05-02 33 views
12

私は一見を持っていたWhen do you use git rebase instead of git merge? しかし、私はこの場合どの解決法を選択するかについて確かめたい: 私はマスターに新しい機能を実装したいので、私は新しいフィーチャーブランチ。 フィーチャーで10回のコミットを行い、他の誰かがマスターで他のコミットをします。Git - Merge vs rebase

私の枝はテスト目的のために私の枝をマスターから離しておきたいが、新しいマスターコミットでテストする必要がある。 それでは、Masterをフィーチャーにマージして、テストに先立ってマスターに自分の変更を適用するMasterにフィーチャーを追加しないでください。

+0

これは議論の対象です。私はリベースをするだろう。 – 1615903

+0

あなたが見たリンクの一番上の答えは、あなたのユースケースを再構築するための明確な推奨を提供します。 – mah

+0

今後、あなたが解決しようとしている問題点をより明確に説明する、よりわかりやすいタイトルを使用してください。 –

答えて

5

マージされたバージョンをテストするために新しいブランチを作成してみませんか?たとえば:

git checkout -b test-merged-feature master 
git merge my-feature 
[... do your testing ..] 

はここにリベースを行うには、特に理由はありませんが、あなたはすでにあなたの機能ブランチをプッシュしていない場合、それは同様に罰金だろう。これらの質問は、あなたの歴史をどのように見せたいかについての部分的なものです。多くのマージを見るのが好きな人もいます。あるコミットが特定の機能にどのような貢献をしたのかを把握する方法としてそれを好む人もいます。

+0

機能を一緒にテストするために "dev"ブランチを持っていて、それをプロダクションのためにマスターに置くことはその場合には良い方法でしょうか?だから、マージ対リベースの質問は、コミットの履歴をどのようにしたいのかということだけです。 – user2316341

+0

私はこのオプションに同意します(新しいブランチでマージする)ので+1します。しかし、私はまだ以下の私の答えのrebaseを提唱しています。 – VonC

+0

@ user2316341複数のFeatureブランチを統合(マージ)しなければならない場合、 "dev"ブランチが意味を持ちます。しかし、一度にFeatureブランチが1つしかない場合は...それは少しの利益のために複雑さを追加します。 – VonC

5

ブランチを既にプッシュしていない限り(また、他の人があなたのレポをクローンしていることが分かっている場合を除き)、私は自分の回答で「git rebase vs git merge」と述べたとおり、

最終的なマージ(Featuremaster)が確実に早送りされるように、ローカルリポジトリ(git fetch)を更新するたびに、通常はリベースします。

歴史の見方だけではなく、開発中のものがmasterの古いバージョンに基づいていないことを確認することが主な目的であり、時間の経過とともにmasterで行われた最新の進化。私は精通していたワークフローで

+0

だから、私はいつもrebaseをしなければならないと言っていますが、すでに私の支店を押しているのではありません。何故ですか ?既に支店を押しているという問題は何ですか? – user2316341

+0

@ user2316341リベースはSHA1の履歴を書き換えます。この場合、rebaseによって生成された新しい履歴によってすでにプッシュされている履歴を置き換えるには、 'git push --force'を実行する必要があります。誰もあなたのブランチを使用していない場合、これは大きな問題ではなく、中間ブランチに人為的にマージを追加することよりもはるかに簡単で安全なソリューションです。 – VonC

+0

@ user2316341この問題の例としてhttp://stackoverflow.com/a/8940299/6309を参照してください。 – VonC

5

、私は「派生物」の枝に向けてrebaseingされているトランク、および統合ブランチ(S)、および機能ブランチ

があります。 (派生ブランチによって、私はトランクから離れる方向を意味します)、統合ブランチに合併します。

私は、私が統合している支店と同じ歴史を持つ支店で常に働いているのが好きです。私はマージが早送りになるのが好きなので、私がちょうどマージしたものが私のブランチでテストしたものとまったく同じであることを知っています。

0

2人の開発者が同じリポジトリにコミットすると(これは競合します)、2つのコミットをマージコミットを作成してマージするか、もう一方のコミットの上に1つのコミットをリベースすることができます。マージコミットを生成するのではなく、常にリベースするほうがよいでしょう。