HOWTO · Git
Fatal: Refusing to Merge Unrelated Historys Error in Git
この記事では、Git の致命的: 無関係な履歴のマージを拒否するエラーを解決するために必要な手順の概要を説明します。
この記事では、Git の致命的: 無関係な履歴のマージを拒否していますというエラーを解決するために必要な手順の概要を説明します。 通常、関連のない 2つの Git プロジェクトを 1つのブランチにマージしようとすると、このようなエラーが発生します。
受信者ブランチにコミットがあり、クローンに互換性のないタグがある場合にポップアップします。
Git での致命的: 無関係な履歴のマージを拒否するエラーの一般的なシナリオ
Git で fatal: refusing to merge unrelated historys エラーが発生する可能性が高いいくつかのケースを次に示します。
-
コミットを含むローカル リポジトリがあり、既存のリモート リポジトリからプルしようとしています。 歴史が違うので、Gitはどう進めばいいのかわからない。
したがって、エラーメッセージ。
-
.gitディレクトリが破損しています。 -
ブランチが異なる
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つの方法と、それを回避する最善の方法を説明しました。