テクノロジー · 実用ガイド

Git の「refusing to merge unrelated histories」?フラグの前にグラフを証明する

最初から --allow-unrelated-histories を付けないでください。repository、remote、root commit、merge-base を確認し、誤接続を直すか、独立した2つの履歴を意図的に保存するかを決めます。

freeze、identify、merge-base、decision を示すオリジナル Git 図。
オリジナルイラスト:merge policy の前に identity と ancestry を証明。 Watch at Ease

このエラーは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 に確認します。

identity 修正と2履歴保存を分けるオリジナル決定図。
オリジナルイラスト:両履歴が必要な場合だけ例外 merge。 Watch at Ease