【Git】fatal: refusing to merge unrelated historiesの解決方法

投稿日:2023/06/01 最終更新日:2023/06/01

【Git】fatal: refusing to merge unrelated historiesの解決方法

Gitは複数のブランチをマージする際に、共通の起点を持つ関連する履歴であることを期待します。

しかし、場合によっては異なる履歴を持つブランチをマージしようとすると、エラーメッセージ の”fatal: refusing to merge unrelated histories” が表示されることがあります。

この記事では、このエラーの解決方法について詳しく説明します。

解決方法

パターン1. –allow-unrelated-histories フラグの使用

–allow-unrelated-histories フラグを使用することで、異なる履歴を持つブランチを強制的にマージできます。

以下のコマンドを使用してマージを試みてください。

git merge --allow-unrelated-histories <branch-name>

パターン2. 履歴を整理する

もしマージしようとしているブランチが本当に関連性のない履歴を持つ場合、マージする前に履歴を整理することを検討してください。

他のブランチと共通のベースコミットを作成し、それを起点にしてマージを行うことで、関連性のあるマージが可能になります。

git checkout -b <new-branch-name>
git cherry-pick <commit-hash>

上記のコマンドを使用して新しいブランチを作成し、関連するコミットを一つずつ取り込むことができます。

パターン3. リベースを使用する

もしマージするブランチが既にリモートリポジトリにプッシュされている場合、–allow-unrelated-histories フラグの使用は推奨されないことがあります。

代わりに、リベースを使用して履歴を整理し、関連するマージを行います。

git checkout <branch-name>
git rebase <base-branch>

上記のコマンドを使用して、ベースブランチからの変更を取り込むことができます。

その後、マージを行うことで関連性のあるマージが可能になります。

まとめ

Gitのエラーメッセージ “fatal: refusing to merge unrelated histories” は、異なる履歴を持つブランチのマージを拒否しています。

正しいマージを実行するためには、ブランチの関連性や履歴の整理を考慮する必要があります。

Gitの柔軟性を活かし、適切な解決策を選択してください。