テクノロジー · 実用ガイド
Git の「refusing to merge unrelated histories」?フラグの前にグラフを証明する
最初から --allow-unrelated-histories を付けないでください。repository、remote、root commit、merge-base を確認し、誤接続を直すか、独立した2つの履歴を意図的に保存するかを決めます。

このエラーは2つの履歴に共通祖先が見つからないことを示します。両方を結合すべきことや remote が正しいことまでは示しません。
現状を保存し、path、remote、root commit、merge-base を確認します。その後で誤った identity を直すか、2つの project を意図的に残します。
履歴変更前に証拠を保存
失敗 command、path、status、remotes、graph を保存し、backup または保護 branch を作ります。
残す local-only commits、untracked files、secrets を確認します。
identity と ancestry を証明
remote URL を確認して refs を fetch し、tips と roots を調べます。wrong directory、origin、shallow fetch、double init を除外します。
git merge-base A B の終了 status と出力を確認します。base があれば refs/fetch を調査し、なければ次の policy 判断へ進みます。
両方の履歴が必要か判断
一方が誤った README や repository なら remote/path を直すか clean clone に移します。確認前に旧 directory を削除しません。
両 project の履歴が必要なら final layout、ownership、conflict policy を決め、必要なら subtree を選びます。
例外 merge を意図的に実行
変更を保存し保護 branch を作り、正確な tip を fetch します。両 roots が必要な場合だけ flag を使います。
conflicts と staged tree を全て確認し、予想外の衝突や露出があれば abort します。
検証して記録
merge commit の2 parents、tests、final tree を確認し、push 前に remote と protection を確認します。
元 tips、merge-base、backup、strategy を記録し、identity が不明なら owner に確認します。
