マージとリベースの違い

Git で、ブランチを統合する方法としてマージとリベースがありますが、どのような違いがあるのでしょうか。

マージ(Merge)を行った場合は、統合前のブランチの変更履歴はあくまで統合後とは分離した状態で保持されます。統合後も修正内容が比較的わかりやすく、後述するリベースの問題点も起きませんが、プロジェクトの規模が大きくなると履歴が複雑になるともいえます。

リベース(Rebase)を行った場合は統合前のブランチに対するコミットも、統合後のブランチへのコミットとして付け替えられ、完全に履歴が一本化されます。履歴が比較的シンプルになりますが、競合発生時の対処が複雑になり、また過去のコミットを付け替える、つまり変更を加えるということが問題になることもあります。