多くの git ワークフローは、機能ブランチをメインラインに持ち込むためにgit merge --no-ffを実行することを推奨しています。個人的には、機能ブランチをgit rebase -iして 1 つのクリーンなコミットにし、それを単純な git マージすることを好みます。
フィーチャー ブランチに対して merge --no-ff の代わりに、このように rebase -i を使用することの欠点はありますか?
多くの git ワークフローは、機能ブランチをメインラインに持ち込むためにgit merge --no-ffを実行することを推奨しています。個人的には、機能ブランチをgit rebase -iして 1 つのクリーンなコミットにし、それを単純な git マージすることを好みます。
フィーチャー ブランチに対して merge --no-ff の代わりに、このように rebase -i を使用することの欠点はありますか?
を使用merge --no-ff
すると、マージされたブランチの各 HEAD (最後のコミット) を親として持つ新しいコミットが作成されます。この場合、「メインライン」の最後のコミットと「機能」ブランチの最後のコミットです。これにより、「機能」ブランチの履歴がマージ コミット履歴の一部であることを git に認識させることができます。
との履歴merge
、マージされたコミット*
には、親として両方のブランチ HEAD があります。
mainline ---------*
/
feature -------/
を使用rebase -i
すると、新しいコミットには、リベースされたコミットの親のリストに「機能」ブランチの HEAD が含まれないため、リポジトリはコミットの以前の履歴を追跡できなくなります。
の履歴rebase
、リベースされたコミット*
には、親として「メインライン」HEAD が 1 つだけあります。
mainline --------*
feature --------
参照のないコミットはガベージ コレクションされることに注意してください。「rebase -i」を使用すると、参照が作成されず (リベース コミットに親として含まれていないため)、「feature」ブランチが削除された場合、その履歴は最終的に削除されます (完全にリポジトリの周りに他の参照がない場合、ガベージ コレクターによって削除されます)。