私たちのプロジェクトには、非常に奇妙な git 履歴があります。まず、次のような歴史を持つ別のプロジェクトがありました。
レポ1:
a---b---c
それから私たちのプロジェクトがありました
レポ2:
u---v---w
repo2 のコードで repo1 が必要だったので、「賢い」プログラマーは read-tree を使用して repo1 の最後のコミット (c) を w に読み込みました。
u---v---w---w'
ここで、w' にはコミット c が含まれていましたが、その履歴はありません。その後、両方のリポジトリにいくつかの変更が加えられ、次の履歴が作成されました。
a---b---c---d---e
u---v---w---w'---x---y
ここで、混乱を一掃し、repo1 の変更をリポジトリに組み込みます。ただし、2 つのリポジトリを単純にマージすると、ブランチが履歴を共有しないため (実際には共有しているが、git は知らない)、極端な数の競合が発生するため、git は 3 方向のマージを実行できません。
では、どうすれば 3 方向のマージを行うことができるでしょうか。不足している履歴エッジを「追加」する方法はありますか。つまり、次のようなものを作成します。
a---b---c---d---e
\
u---v---w--w'---x---y