HOWTO · Git

Fatal: Refusing to Merge Unrelated Historys Error in Git

この記事では、Git の致命的: 無関係な履歴のマージを拒否するエラーを解決するために必要な手順の概要を説明します。

この記事では、Git の致命的: 無関係な履歴のマージを拒否していますというエラーを解決するために必要な手順の概要を説明します。 通常、関連のない 2つの Git プロジェクトを 1つのブランチにマージしようとすると、このようなエラーが発生します。

受信者ブランチにコミットがあり、クローンに互換性のないタグがある場合にポップアップします。

Git での致命的: 無関係な履歴のマージを拒否するエラーの一般的なシナリオ

Git で fatal: refusing to merge unrelated historys エラーが発生する可能性が高いいくつかのケースを次に示します。

  1. コミットを含むローカル リポジトリがあり、既存のリモート リポジトリからプルしようとしています。 歴史が違うので、Gitはどう進めばいいのかわからない。

    したがって、エラーメッセージ。

  2. .git ディレクトリが破損しています。

  3. ブランチが異なる HEAD 位置にある場合。

Git の fatal: refusing to merge unrelated historys エラーを解決する

無関係なマージを許可することで、エラーを解決できます。 以下に示すように、プルリクエストに --allow-unrelated-history フラグを追加することでこれを行うことができます。

$ git pull origin master --allow-unrelated-histories

Git では、関係のない履歴を持つブランチをマージできます。 ファイルが競合しない場合は、非常に簡単です。

上記の方法が最も簡単です。 ただし、同じ目的地へのより長いルートがあります。

まず、現在のすべてのコミットをアンステージして隠しておく必要があります。 その後、リモート リポジトリからプルして、スタッシュを新しいクローンに適用できます。

これにより、マージの競合が発生した場合に対処しやすくなります。

最後のコミットのすべてのファイルのステージングを解除するには、次のコマンドを使用します。

$ git reset HEAD~

以下のコマンドを実行して、ファイルをスタッシュします。

$ git stash

これで、クリーンな作業ツリーができました。プル リクエストを実行できます。その後、スタッシュを解除して、スタッシュされた変更を作業ツリーに適用します。 以下を実行できます。

$ git stash pop

上記のコマンドは、スタッシュを適用して破棄します。 スタッシュを適用して保持したい場合は、次を実行できます。

$ git stash apply

そうは言っても、このエラー メッセージを回避する最も簡単な方法は何ですか?

コミットを含むローカル ブランチにリモート リポジトリをプルすることは避けてください。 必要に応じて、新しいブランチを作成し、変更を手動でプルしてマージします。

結論として、別のコミット履歴を持つブランチをマージしようとすると、fatal: refusing to merge unrelated historys エラーが発生します。 エラーを解決する 2つの方法と、それを回避する最善の方法を説明しました。