私は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
アップストリーム(呼び出す呼び出し元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/master
をrefs/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 fetch
とgit merge
(またはgit rebase
)の2つの個別のステップとして実行した場合、Gitはキャッシュされたremotes/Origin/
リモートトラッキングブランチを見て、マージまたはリベース。そのようなブランチが一度にwasだった場合でも、リモート追跡ブランチが残っている可能性があります。この場合、エラーメッセージは表示されません。そのようなブランチがなかった場合、またはgit fetch
で--Prune
を実行した場合(デッドリモートトラッキングブランチを削除する)、対応するリモートトラッキングブランチがない場合、苦情が発生します。 、しかし代わりにOrigin/feature/Sprint4/ABC-123-Branch
を参照します。
どちらの場合でも、feature/Sprint4/ABC-123-Branch
はOrigin
という名前のリモートに存在しないと結論付けることができます。
おそらく一度に存在し、おそらくリモート追跡ブランチからローカルブランチを作成したでしょう。もしそうなら、おそらくあなたはまだリモート追跡ブランチを持っています。誰がリモートからブランチを削除したか、その理由を調べるために調査したり、何かをプッシュして再作成したり、リモートトラッキングブランチやローカルブランチを削除したりできます。
1まあ、それは少なくともadmitに行くことです。しかし、いくつかの参照を明確に隠していない限り、リストにはすべてが含まれています。
あなたのリモートブランチが引っ張ることができるかどうかチェックしてください。私は同じ問題を抱えていて、ようやくリモートブランチが誰かによって削除されたことに気づきました。
あなたや他の人がブランチの名前を変更した場合も同様です。そのため、次の手順に従ってください(ブランチ名が名前変更されていることがわかっている場合)。以前のブランチ名を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
(以前のメッセージは表示されません)
私にとってそれは大文字と小文字の区別の問題でした。私のローカルブランチはVersion_Feature2ではなくVersion_feature2でした。私は正しいケーシングを使って私のブランチを再チェックアウトしてからgit pullがうまくいった。
Originのブランチ名に大文字と小文字の区別がある場合にも、このエラーが発生する可能性があります。
例:Originブランチはteam1-Team
で、ローカルブランチはteam1-team
としてチェックアウトされています。それから、-Team
のT
と-team
のt
はそのようなエラーを引き起こす可能性があります。これは私の場合に起こりました。そのため、Originのブランチの名前でローカル名を変更することで、エラーは解決されました。
実際の原因が私のディスクがいっぱいだったことだったとき私は同じようなエラーを得ました。いくつかのファイルを削除した後、git pull
は思ったように動き始めました。
誰かがリモートでブランチを削除したかどうかを確認するだけです。
私の場合、私は単にリモートブランチへの最初のコミットを欠いていたので、ローカルブランチはプルするものを見つけられず、そのエラーメッセージを出していました。
やった:
git commit -m 'first commit' // on remote branch
git pull // on local branch
私はこの問題に遭遇し続けた。私の場合、ブランチ名の大文字と小文字の違いに関する@ Jerreckのコメントがこのエラーの原因でした。一部のWindowsツールは大文字と小文字の区別を意識していません。
Gitで大文字と小文字を区別しないようにするには、次のコマンドを実行します。
git config --global core.ignorecase true
これはブランチ名以外にも影響を与えることに注意してください。たとえば、同じディレクトリに "Foo.h"と "foo.h"がある場合(Windows用のソフトウェアを構築するときにはあまり役に立ちません)、大文字と小文字の区別を無効にできないと思います。
私にとっては、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を見つけていないことは理にかなっている - 私にとってはローカルフォルダを削除して再度クローンを作成する方が簡単だった。
ホームフォルダの~/.gitconfig
ファイルを編集できます。これがすべての--global設定が保存される場所です。
または、git config --global --unset-all remote.Origin.url
を使用し、リポジトリのURLでgit fetch
を実行した後。
私の現在のブランチがdevであり、MRブランチにチェックアウトし、その後git pullを実行していたのと同じ問題に直面していました。私が取った簡単な回避策は、MR Branch用に新しいフォルダーを作成し、そこにgit pullしてからgit cloneを実行することでした。
それで、基本的に私はコードを異なるブランチにプッシュするために異なるフォルダを管理していました。
私の場合、現在のブランチが由来する元のブランチを削除しました。だから.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"を実行すると、ちょうどこのエラーが発生します。いくつかのスペースを作成し、それはすべてうまくいき始めました。