あなたの設定はリモートからの<ブランチ名>とマージすることを指定していますが、そのような参照はフェッチされませんでしたか?


202

プルでこのエラーが発生します:

構成は、リモートからの参照「refs / heads / feature / Sprint4 / ABC-123-Branch」とマージすることを指定していますが、そのような参照はフェッチされませんでした。

このエラーは他のブランチでは発生しません。
このブランチの特別な点は、別のブランチの以前のコミットから作成されていることです。

私の設定ファイルは次のようになります:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch

マージに使用しているコマンドを共有できますか?
dchayka 2016年

1
この問題は、リモートブランチが削除された場合に発生する可能性があります。本当にそこにあるか再確認してください。
ベニーノイゲバウアー2017年

4
今後の読者:リモートブランチが存在することがわかっている場合は、大文字と小文字を区別しているかどうかを確認してください。リモートブランチを追跡するようにローカルブランチをセットアップしましたが、リモートの名前をすべて小文字で入力しました。origin / branchnameの代わりにorigin / BranchNameを追跡するためにローカルを再構成する必要がありました
Jerreck

このエラーが発生しただけで、問題は以下の回答よりもはるかに単純で、VPN接続が失われました。したがって、これはgitがリモートオリジンサーバーにアクセスできない場合に発生するエラーでもあります。
Ben Thurley

私のgitサーバーが停止しました。それが原因です。
dellasavia

回答:


147

これが意味すること

あなたのアップストリームorigin、つまりあなたが呼ぶリモートは、という名前のブランチをもう持っていないか、持っていなかったかもしれません(この情報だけから判断することは不可能です)feature/Sprint4/ABC-123-Branch。これには特に一般的な理由が1つあります。誰か(おそらくあなたではない、またはあなたが覚えているはずではない)が、他のGitリポジトリのブランチを削除したためです。

何をすべきか

これは何をしたいかによります。以下の説明セクションを参照してください。あなたはできる:

  • リモートでブランチを作成または再作成する、または
  • ローカルブランチを削除する、または
  • あなたが考えることができる他の何か。

討論

実行している必要がありますgit pull(実行しているgit merge場合は、別のエラーメッセージが表示されるか、エラーメッセージがまったく表示されません)。

を実行するとgit fetch、構成のセクションのurl下にある行に基づいて、Gitが別のGitに接続し[remote "origin"]ます。そのGitはupload-pack、とりわけGitにすべてのブランチのリストを送信するコマンド()を実行しますgit ls-remoteこれがどのように機能するかを確認するために使用できます(試してみてください、それは教育的です)。これをGitリポジトリで実行すると、次のようになりますgit

$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f    HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b    refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f    refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1    refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6    refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638    refs/heads/todo
[snip]

refs/heads/エントリが、リモートに存在するブランチの全てをリスト、1対応と一緒に(のIDをコミットrefs/tags/エントリIDがコミットではなく、オブジェクトタグを指すことができます)。

Gitはこれらの各ブランチ名を取得し、同じセクションの行に従って変更します。この場合、あなたのGitは置き換えて、たとえば、。あなたのGitは出くわすすべてのブランチ名でこれを行います。fetchremoterefs/heads/masterrefs/remotes/origin/master

また、元の名前を特殊ファイルに記録しますFETCH_HEAD(自分の.gitディレクトリを覗くと、このファイルが表示されます)。このファイルは、フェッチされた名前とIDを保存します。

このgit pullコマンドは、便利なショートカットとして意図さgit fetchれています。適切なリモートで実行され、セクションのgit merge指示に従ってgit rebaseマージ(またはリベース)するために必要な引数を使用して(または、指示された場合は)実行され[branch ...]ます。この場合、[branch "feature/Sprint4/ABC-123-Branch"]セクションはからフェッチしてorigin、という名前で見つかったIDとマージするように言っていますrefs/heads/feature/Sprint4/ABC-123-Branch

その名前で何も見つからなかったので、git pull文句を言ってやめます。

これを2つの個別のステップとして実行し、git fetchその後git merge(またはgit rebase)に実行した場合、Gitはキャッシュされたremotes/origin/リモート追跡ブランチを調べて、何をマージまたはリベースするかを確認します。一度そのようなブランチがあった場合でも、リモート追跡ブランチがある可能性があります。この場合、エラーメッセージは表示されません。そこに、このような枝はなかった、またはあなたが実行している場合場合git fetch--prune(デッドリモート追跡の枝を除去する)ので、あなたは何の対応するリモート追跡ブランチを持っていないことを、あなたは苦情になるだろうが、それはを参照してしまうorigin/feature/Sprint4/ABC-123-Branch代わりに。

どちらの場合もfeature/Sprint4/ABC-123-Branchnamedのリモートには現在存在しないと結論付けることができますorigin

それはおそらく一度に存在し、おそらくあなたはリモート追跡ブランチからローカルブランチを作成したでしょう。その場合は、おそらくまだリモート追跡ブランチがあります。リモートからブランチを削除したユーザーとその理由を調べるために調査するか、何かをプッシュしてブランチを再作成するか、リモート追跡ブランチやローカルブランチを削除します。


1ええと、少なくともそれが認めようとしているすべてのこと。しかし、特にいくつかの参照を隠していない限り、リストにはすべてが含まれています。


git pullコマンドが実際に行うことを説明していただきありがとうございます。git fetchを実行してからマージすることで問題を修正できました。
フィッチ

11
ローカルリポジトリに存在しないリモートブランチ参照を削除するには、次を使用しますgit remote prune origin
Yoav

1
@ Ben-Uri:はい、またはrun git fetch --prune origin、またはに設定で設定fetch.prunetrueます(3つすべてが同じことを行うことを目的としていますが、Gitのいくつかのバージョンでは、これらのいくつかは完全に信頼できません)。
torek

1
あなたはgit checkout <your remote branch>(場合によっては)すべてが上手である必要があります。
Alexander Shtang

2
@JonathanBenn:git branch --set-upstream-to=origin/master masterローカルのアップストリーム設定を切り替えるために使用できますmaster。Delete-and-recreateには、副作用として(DWIMスタイルgit checkout masterを使用して作成すると想定)、さらにmasterをに一致させるという副次的な影響がありますorigin/master
トレック

71

これは、あなた/誰かがブランチの名前を変更した場合にも発生する可能性があります。したがって、次の手順に従います(ブランチ名が名前変更されていることがわかっている場合)以前のブランチ名wrong-branch-namecorrect-branch-nameとし、誰かがそれをSoに名前変更したと仮定します。

git checkout correct-branch-name

git pull (あなたはこの「あなたの設定は..」を見るでしょう。)

git branch --unset-upstream

git push --set-upstream origin correct-branch-name

git pull (以前のメッセージは表示されません)


1
git push現在のブランチがそのリモートの背後にある場合、それは必要ではなく、機能しません。git pull origin correct-branch-name十分です
ピエール

1
上記のアップストリームを設定するコマンドは間違っています。次のようにgit pullを実行します--unset-upstream操作、pullの出力でエラーを確認できます。以下のように、upstreamを設定するコマンドを使用します。git branch --set-upstream-to = origin / <branch > mybranch
Ankit Marothi

私のリポジトリからいくつかの大きなファイルを削除した後、私のためにうまく機能し、私が作成したばかりの新しいリポジトリに戻る必要がありました
larrytech

40

リモートブランチがプルできるかどうかを確認します。私は同じ問題を抱えていましたが、リモートブランチが誰かによって削除されたことにようやく気付きました。


4
私も同じでした!
Aerin 2018

3
プルリクエストの後、マージ(つまり、マージを実行した人)には、ターゲットブランチにマージされたブランチを削除するオプションがあります。その時点でプルしようとすると、このエラーが発生します。
Artokun

それは本当です:)
Malhaar Punjabi

7

私にとっては、大文字と小文字の区別の問題でした。私のローカルブランチは、Version_Feature2ではなくVersion_feature2でした。正しいケースを使用してブランチを再チェックアウトしたところ、git pullが機能しました。


2
これも私の問題でした。ブランチ名がかなり長く複雑な場合でも、必ずしも明確である必要はありません。
ホーコンK. Olafsen

6

このエラーは、元のブランチ名に大文字と小文字の問題がある場合にも発生する可能性があります。

例:元のブランチはteam1-Teamで、ローカルブランチはとしてチェックアウトされていteam1-teamます。次に、このT-Teamtでは-team、そのようなエラーを引き起こす可能性があります。これは私の場合に起こりました。したがって、ローカル名を元のブランチの名前に変更することで、エラーは解決されました。


6

私の場合、リモートブランチでの最初のコミットが欠けていたため、ローカルブランチはプルするものを何も見つけておらず、エラーメッセージが表示されていました。

やった:

git commit -m 'first commit' // on remote branch
git pull // on local branch

4

実際の原因がディスクがいっぱいであることであるときに、同様のエラーが発生しました。一部のファイルを削除した後、git pull期待どおりに動作し始めました。


4

私はこの問題に遭遇し続けました。私の場合、ブランチ名の大文字と小文字の違いに関する@Jerreckのコメントがこのエラーの原因でした。一部のWindowsツールは、大文字と小文字の区別を認識しません。

gitで大文字と小文字の区別をオフにするには、次のコマンドを実行します。

git config --global core.ignorecase true

これはブランチ名以外にも影響を与えることに注意してください。たとえば、 "Foo.h"と "foo.h"が同じディレクトリにある場合(Windows用のソフトウェアを作成する場合はあまりお勧めできません)、大文字と小文字の区別をオフにできないと思います。


2

誰かがリモートでブランチを削除したかどうかを確認してください。


1

私の場合、現在のブランチが派生した元のブランチを削除しました。だから私は.git / configファイルで:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.0.5
    rebase = false

simil2.0.5が削除されました。同じブランチ名に置き換えました:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.1.12
    rebase = false

そしてそれはうまくいった


1

次のコマンドを実行すると、ローカルブランチとリモートブランチを簡単にリンクできます。

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull

0

私にとってこれは、ブランチインターフェイスの開発をWebインターフェイスを使用してマスターにマージし、開発ブランチで開いていたVSCodeを使用して同期/プルしようとしたために発生しました(このエラーが発生しない限り、マスターに変更できないことは奇妙です)。

git pull
Your configuration specifies to merge with the ref 'refs/heads/dev'
from the remote, but no such ref was fetched.'

refs / heads / devが見つからないのは理にかなっています。私にとっては、ローカルフォルダーを削除して再度複製する方が簡単でした。


0

ディスクがいっぱいのときに「git pull」を実行すると、このエラーが発生しました。いくつかのスペースを作成し、それがすべて正常に機能し始めました。


0

あなたは編集することができます ~/.gitconfigホームフォルダー内のファイルをます。すべての--global設定が保存されます。

または、リポジトリURLを使用git config --global --unset-all remote.origin.urlして実行git fetchした後に使用します。


0

現在のブランチがdevである同じ問題に直面していて、MRブランチにチェックアウトして、その後git pullを実行していました。私が取った簡単な回避策は、MR Branchの新しいフォルダーを作成し、そこにgit pullを実行してから、git cloneを実行することでした。

したがって、基本的には、コードを異なるブランチにプッシュするために異なるフォルダーを維持しました。


0

正しいケースを使用しなかったときに、同じエラーが発生しました。「統合」をチェックアウトできました。Gitはgit pull、ブランチを更新するためにを実行するように私に言いました。私はそれをしましたが、言及されたエラーを受け取りました。正しいブランチ名は、大文字の「I」を含む「統合」です。そのブランチをチェックアウトしてプルしたところ、問題なく動作しました。


-2

別のプルが機能する場合は、インターネットが接続されていなかったことを意味します。


多くの反対票がありましたが、これが私がこのエラーを受け取った原因でした。インターネットはありましたが、gitサーバーへのVPNを失っていました。VPNに再接続した後、プルは正常に機能しました。
Ben Thurley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.