2

多くの git ワークフローは、機能ブランチをメインラインに持ち込むためにgit merge --no-ffを実行することを推奨しています。個人的には、機能ブランチをgit rebase -iして 1 つのクリーンなコミットにし、それを単純な git マージすることを好みます。

フィーチャー ブランチに対して merge --no-ff の代わりに、このように rebase -i を使用することの欠点はありますか?

4

1 に答える 1

1

を使用merge --no-ffすると、マージされたブランチの各 HEAD (最後のコミット) を親として持つ新しいコミットが作成されます。この場合、「メインライン」の最後のコミットと「機能」ブランチの最後のコミットです。これにより、「機能」ブランチの履歴がマージ コミット履歴の一部であることを git に認識させることができます。

との履歴merge、マージされたコミット*には、親として両方のブランチ HEAD があります。

mainline  ---------*
                  /
feature   -------/

を使用rebase -iすると、新しいコミットには、リベースされたコミットの親のリストに「機能」ブランチの HEAD が含まれないため、リポジトリはコミットの以前の履歴を追跡できなくなります。

の履歴rebase、リベースされたコミット*には、親として「メインライン」HEAD が 1 つだけあります。

mainline  --------*

feature   --------

参照のないコミットはガベージ コレクションされることに注意してください。「rebase -i」を使用すると、参照が作成されず (リベース コミットに親として含まれていないため)、「feature」ブランチが削除された場合、その履歴は最終的に削除されます (完全にリポジトリの周りに他の参照がない場合、ガベージ コレクターによって削除されます)。

于 2013-09-27T18:11:50.773 に答える