技術 · 實用指南
Git 顯示「refusing to merge unrelated histories」?先證明提交圖,再決定是否放行
不要先加 --allow-unrelated-histories。先核對 repository、remote、root commits 與 merge-base;接錯 repository 就更正,確實要保留兩條獨立歷史才做有備份的合併。

此錯誤表示 Git 在兩條待合併歷史間找不到共同祖先,並不代表兩者一定應合併,也不證明 remote 正確或本地圖完整。
先保留現場並證明身份:核路徑、remote、root commits 與 merge-base;之後只更正錯誤連線,或明確保留兩個專案。
變更歷史前凍結證據
保存命令、路徑、git status --short --branch、git remote -v 與提交圖;先建立備份或保護 branch。
確認本地 commits、未追蹤檔案與 secrets 的邊界。
證明 repository 身份與祖先
核對 remote URL、fetch 目標 refs,檢查 tips 與 roots;錯誤路徑、origin、淺 clone 或雙初始化都可能誤導。
執行 git merge-base A B 並檢查結果。有 base 先查 refs/fetch;沒有 base 也不等於自動允許合併。
決定兩條歷史是否都屬於結果
一邊只是 README 或錯誤 repository 時,更正 remote/path 或移入乾淨 clone,驗證前保留舊目錄。
兩個專案都需追溯時,先定義最終目錄、所有權和衝突政策;必要時採 subtree。
刻意使用例外合併
保存變更、建立保護 branch 並 fetch 正確 tip;只在兩條 root histories 都該保留時使用 flag。
逐項審查 conflicts 與 staged tree;異常碰撞或檔案外洩就 abort。
驗證並記錄
檢查 merge commit 的兩個 parents、測試與最終 tree,push 前確認 remote 與保護規則。
記錄原 tips、merge-base、備份與決策;身份仍不清楚就停止並聯絡 owner。
