web-dev-qa-db-ja.com

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

私はpullのためにこのエラーを受けています:

あなたの設定はリモートからの参照 '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
112
Farrukh Chishti

これが意味すること

アップストリーム(呼び出す呼び出し元Origin)は、feature/Sprint4/ABC-123-Branchという名前のブランチをもう持っていないか、まったく持っていないかもしれません(この情報だけではわかりません)。特に一般的な理由が1つあります:他のGitリポジトリ内のブランチを誰かが削除した可能性があります。

何をすべきか

これは、あなたが欲しいに依存します。以下の説明セクションを参照してください。あなたはできる:

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

討論

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

git fetchを実行すると、構成の[remote "Origin"]セクションの下にあるurl行に基づいて、Gitが別のGitに接続します。 Gitはコマンド(upload-pack)を実行し、とりわけyourGitにすべてのブランチのリストを送信します。 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はこれらの各ブランチ名を取得し、同じfetchセクションのremote行に従ってchanges 。この場合、たとえば、Gitはrefs/heads/masterrefs/remotes/Origin/masterに置き換えます。 Gitは、出会うすべてのブランチ名でこれを行います。

また、元の名前を特殊ファイルFETCH_HEADに記録します(独自の.gitディレクトリを覗くと、このファイルを見ることができます)。このファイルは、取得した名前とIDを保存します。

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

その名前で何も見つからなかったので、git pullは文句を言い、停止します。

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

どちらの場合でもfeature/Sprint4/ABC-123-BranchOriginという名前のリモートに存在しないと結論付けることができます。

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


1まあ、それは少なくともadmitに行くことです。しかし、いくつかの参照を明確に隠していない限り、リストにはすべてが含まれています。

85
torek

あなたのリモートブランチが引っ張ることができるかどうかチェックしてください。私は同じ問題を抱えていて、ようやくリモートブランチが誰かによって削除されたことに気づきました。

33
Malhaar Punjabi

あなたや他の人がブランチの名前を変更した場合も同様です。そのため、次の手順に従ってください(ブランチ名が名前変更されていることがわかっている場合)。以前のブランチ名をwrong-branch-nameと想定し、誰かがcorrect-branch-name Soと名前変更します。

git checkout correct-branch-name

git pull(「あなたの設定は..を指定します」と表示されます)

git branch --unset-upstream

git Push --set-upstream Origin correct-branch-name

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

33
Extreme

私にとってそれは大文字と小文字の区別の問題でした。私のローカルブランチはVersion_Feature2ではなくVersion_feature2でした。私は正しいケーシングを使って私のブランチを再チェックアウトしてからgit pullがうまくいった。

3
nicko

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

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

3
akgupta

実際の原因が私のディスクがいっぱいだったことだったとき私は同じようなエラーを得ました。いくつかのファイルを削除した後、git pullは思ったように動き始めました。

2
user1747134

誰かがリモートでブランチを削除したかどうかを確認するだけです。

2
AB Abhi

私の場合、私は単にリモートブランチへの最初のコミットを欠いていたので、ローカルブランチはプルするものを見つけられず、そのエラーメッセージを出していました。

やった:

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

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

Gitで大文字と小文字を区別しないようにするには、次のコマンドを実行します。

git config --global core.ignorecase true

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

1
Stéphane

私にとっては、Webインターフェースを使用してブランチdevをmasterにマージし、次にdev branchで開いていた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
Davvit

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

または、git config --global --unset-all remote.Origin.urlを使用し、リポジトリのURLでgit fetchを実行した後。

0
Angelo Mendes

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

それで、基本的に私はコードを異なるブランチにプッシュするために異なるフォルダを管理していました。

0
Monalisa Das

私の場合、現在のブランチが由来する元のブランチを削除しました。だから.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

そしてそれは働いた

ディスクがいっぱいになったときに "git pull"を実行すると、ちょうどこのエラーが発生します。いくつかのスペースを作成し、それはすべてうまくいき始めました。

0
user7550381