2011-06-28 3 views
2

私は自分のマスターブランチを持っていて、新しい機能を扱うためにfeature-xブランチを作成します。 feature-xにいくつかのコミットを行い、masterからfeature-xをrebaseし、feature-xブランチからmasterブランチへの非早送りマージを行います。gitは、今すぐ削除されたブランチからの非高速フォワードマージをどのように扱いますか?

ここでfeature-xブランチを削除すると、私のコミット履歴はどうなりますか?

記事を読んだ後で、フィーチャ特有の変更や機能の完全なライフサイクルを追跡するのは、非ffマージを行うことで簡単にできるため、非ffマージを行っています。

+0

2つの答えの間に重要なことは、ブランチが単に指定されたコミットのポインタであることです。それを削除しても、コミットは削除されません。 – Cascabel

答えて

4

は、マージ後のあなたの歴史は、このようなものになります。ここでは

A-----------E 
\  /
    B---C---D 

、Dはリベース後の機能-X支店のヘッドがあるが、Eはマスターブランチの先頭ですマージ後。 feature-xブランチを削除するとどうなるでしょうか?何もない。ブランチは特定のリビジョンの1つのポインタ(reflogのような追加データを加えたもの)です。削除すると、ポインタだけが失われます。マスターは、削除する前のものとまったく同じです。

あなたはなぜリベースをマージしているのかわかりません。履歴をクリアに保ちたい場合は、マージを使用するだけで、リベースする必要はありません。

+0

右ではあるが、コミットB、C、およびDは、フィーチャーxの開発方法を示しています。私がブランチを削除すると、そのフィーチャのコミットの履歴が失われ、最終的な結果しか見ることができないということですか?また、masterに追加のコミットがあったためにfeature-xをmasterにrebaseしなければならないと思ったので、feature-xが最新の一般的なコードを使用していたため、最終的なマージ競合の可能性が少なくなりました – KallDrexx

+0

いいえ、 。歴史は同じです。 svickは言ったように、ブランチフィーチャ-xの最新コミットへのブランチ参照のみを失いますが、すべてのコミットをマージしているので、マスターブランチ – dunni

+0

@ Kallからリベースすることができますrebaseしなければならない。リベースとマージは全く同じ状態のレポで終了するはずですが、それは異なるように見える歴史です。そして、私はこの方法をrebaseすることは、マージ競合の可能性を減らすとは思わない。なぜなら、gitはどちらの場合も同じマージをしなければならないからだ。しかし、違いがあります:マージでは、(潜在的に大きくて紛らわしい)編集の衝突が発生します。リベースすれば、あなたはそれをより小さなチャンクにするでしょう。 – svick

2

実際には何も起こりません。依然としてコミットの同じシーケンス(または実際には非循環グラフ)があり、分岐名は引き続きマージコミットメッセージに含まれます。

特定のコミットの特定のラベルを削除するだけです。私が正しくあなたを理解していれば

関連する問題