gitの「マージできないもの」エラーを解決する方法


291

gitでブランチをマスターにマージするときに問題が発生しました。まず、を実行してブランチ名を取得しましたgit ls-remote。そのブランチを「ブランチ名」と呼びましょう。次にgit merge branch-nameコマンドを実行すると、次の結果が得られました。

fatal: branch-name - not something we can merge

このエラーを解決するにはどうすればよいですか?

回答:


356

「マージできるものではない」はどのように発生するのですか?、存在しないブランチをプルしようとしているため、このエラーはブランチ名のタイプミスから発生する可能性があります。

(私の場合のように)それが問題でない場合は、マージするブランチのローカルコピーがない可能性があります。Gitは、ブランチをマージするために、両方のブランチのローカルな知識を必要とします。これを解決するには、マージするブランチをチェックアウトしてから、マージするブランチに戻ります。

git checkout branch-name
git checkout master
git merge branch-name

これは動作するはずですが、次のエラーが表示された場合

error: pathspec 'remote-name/branch-name' did not match any file(s) known to git.

ブランチをチェックアウトする前に、リモート(おそらく「必ずしも」ではないが「origin」)をフェッチする必要があります。

git fetch remote-name

3
これは、新しいリモートを追加した後に私に起こった-私が行うために必要git fetchでリモートブランチをマージする前に最初に。
ジェイソン・

リモートからブランチをフェッチしてチェックアウトします。git fetch && git checkout BranchName
Juni Brosas

2
これは、間違ったプロジェクトにcdしたときに起こりました(つまり、マージしたいブランチがなかった別のリポジトリでした)
JoelFan

1
コマンドライン(help.github.com/articles/syncing-a-fork)でフォークを同期しようとしている場合、このエラーはおそらくステップ0を逃したことが原因です。何ですか?リストされているステップ0はありませんか?はい、それで見逃しがちです。「フォークをアップストリームリポジトリと同期する前に、Gitのアップストリームリポジトリを指すリモートを設定する必要があります。」<-それはステップ0です。そのステップをスキップすると、上記のエラーが発生し、おそらくGoogleに入力されて、ここに導かれます。:-)
Steve Bonds

1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU

96

ばかげた提案ですが、ブランチ名にタイプミスがないことを確認してください!


4
ない愚かな、分岐がまだ(それによって、未知のローカル).. Gitは... CVSやSVNとは異なることを行い、フェッチされていないという事実に減らすことができる「タイプミス」など
クラン

2
この問題は、ブランチ名にコンマ(、)またはアポストロフィ( ')などの文字が含まれている場合にも発生する可能性があります。
AxeEffect 2015年

また、複数のリポジトリで同時に作業している場合は特に、正しいリポジトリまたはターミナルウィンドウ/タブにいることを確認してください。
totymedli

71

リモートのアップストリームからプルするときgit fetch --all、私のためにトリックをしました:

git remote add upstream [url to the original repo]
git checkout [branch to be updated]
git fetch --all
git merge upstream/[branch to be updated]

他の場合では、リモート(起点、上流)ブランチが存在しない場合にも「マージできないもの」というエラーが発生することもわかりました。これは当たり前のように思えるかもしれませんがgit merge origin/develop、しかないリポジトリで自分がやっていることに気付くかもしれませんmaster


5
なぜこの回答が上記のように多くの票を獲得しなかったのか、私は真剣に知りません。'git fetch -all'は、通常、リモートブランチをマージする前に実行するのに失敗し、私にとって問題を解決したコマンドです。
Dayanand Gowda

2
フェッチは自動的にはプルされないため、手動で行う必要があるためです。したがって、ペアfetch --all&pull --allでうまくいきます。
ダニエルポパ

ありがとうございました!それgit remote add upstreamは私がそれを解決するために欠けていた重要なことでした。よくある間違いは、フォークがどこから分岐したかが自動的にわかるということです。
ブレント

23

私にもこの問題がありました。ブランチは 'username / master'のように見えましたが、これは私が定義したリモートアドレスのようにgitを混乱させるようでした。これを使って

git merge origin/username/master

完全にうまくいきました。


4
origin/もリモートブランチの名前の前に置かなければなりませんでした。
AsGoodAsItGet 2017

ブランチの名前にスラッシュが含まれている場合は、これを行う必要があります/
CTS_AE

21

以下の方法はいつも私のために働きます。

git checkout master
git pull
git checkout branch-name-to-be-merged
git pull
git checkout branch-name
git pull
git merge branch-name-to-be-merged

これでうまくいきました。Iこれは、本質的に適切なソリューションです。基本的には必ずソース分岐がでそれをマージしようとする前にチェックアウトしています。
DPS

11

そのブランチがローカルにないために発生する可能性があります。使用をマージする前

git fetch origin

7

マージするブランチがローカルリポジトリに存在しないため、このエラーが発生します。

したがって、最初に次のコマンドでマスターブランチにマージするブランチをチェックアウトします。

git checkout branch_name_to_merge

この後、次のコマンドでマスターブランチとマージしてみてください。

git merge branch_name_to_merge

2
これは、ブランチの名前に注意を払っていない(つまり、スペルが間違っている)場合にも発生する可能性があります:)
Matt Borja

これでうまくいきました。GitタブでAtomで作業していて、ドロップダウンでブランチを切り替えると、コマンドラインとcheckoutブランチに移動する必要がある場合があります
nzaleski

7

このエラーは、変更をマージする場所からのブランチ(つまり、ブランチ名)がローカルに存在しないことを示しているため、ブランチをチェックアウトしてローカルの変更をフェッチする必要があります。マスターブランチにチェックアウトしてフェッチし、以下の手順に従います。

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name

私はうるさくなり、エラーメッセージ上記のようなものを示唆しているとは思わないと言います:-)
ブライアンアグニュー

6

この回答は上記の質問とは関係ありませんが、私は同様の問題に直面しました。おそらくこれは誰かに役立つでしょう。以下のように、機能ブランチをマスターにマージしました:

$ git merge fix-load

次のエラーメッセージが表示されました。

merge:fix-load-マージできるものではありません

上記のすべての解決策を調べましたが、どれもうまくいきませんでした。

問題は自分のブランチ名のスペルミスであることがわかりました(実際には、マージブランチ名はですfix-loads)。


4
私にとって、オリジンの追加はうまくいきました。あなたの例をとると、git merge origin/fix-loads働いた。
Ram Patra、

3

私が実行したときにこのエラーが発生しましたgit merge BRANCH_NAME "some commit message"-コミットメッセージに-mフラグを追加するのを忘れたため、ブランチ名にコメントが含まれていると考えられました。


3

私の意見では、リモートリポジトリでローカルブランチをマッピングするのに失敗しました。私は以下に行い、それはうまくいきました。

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain

2

参照を含む文字列が別のGitコマンド(またはさらに言えば他のシェルコマンド)によって作成された場合は、最後に改行が含まれていないことを確認してください。文字列を「git merge」に渡す前に、それを取り除く必要があります。

エラーメッセージが2行で表示されるため、これがいつ発生するかは非常に明白です。

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge

3
回答に反対票を投じたときにコメントを入力してください。多分それは元のポスターが持っていた問題ではなかったかもしれませんが、それはエラーメッセージの考えられる原因です(私は自分で問題を抱えていました)。
オコケット

2

ブランチ名にコンマ(、)が含まれていたため、このエラーが発生しました。ローカルブランチを削除してから、カンマなしで新しい名前で再確認しました。うまく結合できました。


アンダースコアも問題があるようです。+1
アンデルスリンデン2017年

1
私は頻繁にAndersLindén@ブランチ名にアンダースコアを使用
nzaleski

かっこも問題がありました... + 1
パブロエゼキエル

1

後世のために:AxeEffectが言ったように...タイプミスがない場合は、ローカルのブランチ名にカンマやアポストロフィなどのとんでもない文字があるかどうかを確認してください。まさに今まさにそれが起こった。


またはアンダースコア。+1
アンデルスリンデン2017年

1

マージしようとしているブランチに切り替えられるかどうかを確認することをお勧めします。

マージしたいブランチがローカルリポジトリにあり、スペルエラーがなかったにもかかわらず、このエラーが発生しました。

ブランチに切り替えることができるように、ローカルの変更を無視しました(スタッシュまたはコミットも優先される場合があります)。この後、私は最初のブランチに切り替え、マージは成功しました。


0

私にとってこれを試したときに問題が発生しました:

git merge -s ours --no-commit --allow-unrelated-histories <remote name>/develop

したがって、masterは実際のブランチではなく、Subtreeのブランチ名だったので、実際にはのmaster代わりに記述すべきdevelopでした。


0

これは奇妙に聞こえるかもしれませんが、gitメールと名前を設定することを忘れないでください:

git config --global user.email "MY@EMAIL.COM"
git config --global user.name "FIRST_NAME LAST_NAME"

0

私にとっての問題は、マージメッセージへの「二重引用符」でした。したがって、二重マークを削除すると、すべて魔法のように機能しました。私は誰かを助けたいと思います。(英語が下手でごめんなさい)


0

私はマスターと別のブランチが2つの異なる作業フォルダーにチェックアウトされた作業ツリーを持っていました。

PS C:\rhipheusADO\Build> git worktree list
C:/rhipheusADO/Build         7d32e6e [vyas-cr-core]
C:/rhipheusADO/Build-master  91d418c [master]

PS C:\rhipheusADO\Build> cd ..\Build-master\

PS C:\rhipheusADO\Build-master> git merge 7d32e6e #Or any other intermediary commits
Updating 91d418c..7d32e6e
Fast-forward
 Pipeline/CR-MultiPool/azure-pipelines-auc.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

PS C:\rhipheusADO\Build-master> git ls-remote
From https://myorg.visualstudio.com/HelloWorldApp/_git/Build
53060bac18f9d4e7c619e5170c436e6049b63f25        HEAD
7d32e6ec76d5a5271caebc2555d5a3a84b703954        refs/heads/vyas-cr-core 

PS C:\rhipheusADO\Build-master> git merge 7d32e6ec76d5a5271caebc2555d5a3a84b703954
Already up-to-date

PS C:\rhipheusADO\Build>  git push
Total 0 (delta 0), reused 0 (delta 0)
To https://myorg.visualstudio.com/HelloWorldApp/_git/Build
   91d418c..7d32e6e  master -> master

最新のコミットをマージする必要がある場合:

git merge origin/vyas-cr-core 
git push

そして私がいつもやっていたことと同じです:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push

0

マージしようとしているブランチが現在gitによって識別されていない可能性があるため、実行して git branch 、マージするブランチが存在するかどうかを確認します。存在しない場合は実行git pull し、実行する とgit branch、ブランチが表示されます。そして今、あなたは実行しますgit merge <BranchName>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.