Git のドキュメントによると、git merge は内部で 3-way merge を行います。

2-way merge だと不都合があるのは分かるのですが、ではこの 3-way merge は具体的にどのようなアルゴリズムでマージをするのでしょうか? 厳密には 3-way merge と recursive 3-way merge というものがあるようですが、ここでは Git が内部で使っているものの詳細を教えて頂きたいです。