git pullが失敗し、「参照を解決できません」「ローカル参照を更新できません」


606

git 1.6.4.2を使用して、git pull私が試したところ、次のエラーが発生しました。

error: unable to resolve reference refs/remotes/origin/LT558-optimize-sql: No such file or directory
From git+ssh://remoteserver/~/misk5
 ! [new branch]      LT558-optimize-sql -> origin/LT558-optimize-sql  (unable to update local ref)
error: unable to resolve reference refs/remotes/origin/split-css: No such file or directory
 ! [new branch]      split-css  -> origin/split-css  (unable to update local ref)

試しましたがgit remote prune origin、役に立ちませんでした。


回答:


929

ローカルリポジトリをクリーンアップしてみてください:

$ git gc --prune=now
$ git remote prune origin

man git-gc(1):

git-gc - Cleanup unnecessary files and optimize the local repository

git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]

       Runs a number of housekeeping tasks within the current repository, such as compressing file revisions
       (to reduce disk space and increase performance) and removing unreachable objects which may have been
       created from prior invocations of git add.

       Users are encouraged to run this task on a regular basis within each repository to maintain good disk
       space utilization and good operating performance.

man git-remote(1):

git-remote - manage set of tracked repositories

git remote prune [-n | --dry-run] <name>

           Deletes all stale remote-tracking branches under <name>. These stale branches have already been
           removed from the remote repository referenced by <name>, but are still locally available in
           "remotes/<name>".            

96
なぜこれが機能するのですか?それが修正する問題は何ですか?
Ikke

5
2番目のコマンドがうまくいきました。どうやら、作成されたばかりのリモートブランチへの参照が壊れていました。それがどのように起こったかはわかりませんが、簡単な修正でよかったです。Vitek、ありがとう!
JGTaylor 2017

1
これは完璧に機能しました!これが何をするのか、なぜこれが機能したのかについての説明も欲しいです。ありがとう!
ArielSD 2018

4
ウィルgit remote prune originのコマンドは、私のローカルの作業コピー上またはリモートリポジトリ上で実行しますか?
user1438038

3
@ user1438038ブランチを削除せず、ローカル作業コピーのリモート参照のみを更新します。詳細:stackoverflow.com/questions/20106712/...
Zengineer

606

私にも起こりました。私の場合、悪い参照はマスターでした、そして私は次のことをしました:

rm .git/refs/remotes/origin/master
git fetch

これにより、gitはrefファイルを復元しました。その後、すべてが再び期待どおりに機能しました。


1
私は同じことをしました、そしてそれは私の問題を解決しました。Notepad ++でファイルを開いたところ、明らかに破損していました。
theMayer 2013年

83
マスターではなく、問題が発生しているファイルを選択してください
bia.migueis

6
@ bia.migueis:誤ってマスターを削除しても、何も損傷しない-次のフェッチも更新されるだけです。
naught101 '07 / 07/14

2
サブモジュールの場合、参照を見つけるのが少し難しいかもしれません。まず.git、フォルダーであるかどうかを確認します。ls -laそうでない場合は、ファイル.gitファイルの内容を参照して、refが含まれている実際の.gitフォルダーを見つけます。.git私の場合のファイルの内容: gitdir: ../.git/modules/my-submodule-name
CCoder

1
過去1年間に2回、これを修正するために戻ってきましたが、これは実際に機能する唯一の修正です。
テッド

131

これは私のために仕事をしました:

git gc --prune=now

5
これはうまくいきました。私の日を救ってくれてありがとう!@Berndコマンドの考えられる説明はありますか?
nashcheez

git gc docsはこちら
BigRon

1
私も働いた。実行する必要はありませんでしたgit remote prune origin
Airwavezx

87

私にとっては、エラーをスローしているファイルをフォルダから削除するのに役立ちました.git/refs/remotes/origin/


やった!しかし、好奇心から、このエラーが発生した理由を知っていますか?(すべてが正常に機能していて、ある日突然このエラーが発生しました)。そして、あなたはファイルを削除することでそれがどのように解決されたか知っていますか?
Shreyans

これで問題が解決したと聞いて良かったです。正直に言うと、エラーが発生する原因が何なのかわかりません。フォルダー内のファイルの1つが同期されていないと思っていました。私が見つけた他の修正はどれも機能しなかったので、これを最後の手段として使用しました。
ブライアンファンRooijen 16

よくできました!1つだけ削除してからプルしようとすると、戻ってくるかのように、(取得しているエラーレポートに基づいて)問題の原因となっているすべてのファイルを削除する必要があることに注意してください。
Rayee Roded

1
考えられる原因の1つは、私の回答で説明したように、システムのクラッシュである可能性があります。多くのGit GUIアプリケーションは、レポジトリで定期的にGitを実行し(ステータスを更新するため)、Gitが参照を操作しているときにシステムがクラッシュすると、最終的にNULLsで書き直される可能性があります。
David FerenczyRogožan2018

53

それを試してみてください:

git gc --prune=now

git remote prune origin

git pull

26
これは著者の質問に答えるかもしれませんが、説明する単語やドキュメントへのリンクが不足しています。生のコードスニペットは、周りにいくつかのフレーズがないとあまり役に立ちません。また、良い答えの書き方も非常に役立ちます。回答を編集してください。
Roy Scheffers、

まさにそのポイント。コードを正しくするだけでは不十分で、それだけです。説明があるといいのですが
Musikero31 '15

1
git gc --prune = nowは、不要なファイルを削除しながらローカルリポジトリを更新します。それは私にとってはうまくいきます。
Vasyl Gutnyk

44

次のコマンドを実行します。

rm .git/refs/remotes/origin/master

git fetch

git branch --set-upstream-to=origin/master

念のため、これが何であるかを知る必要がある場合は .git/refs/remotes/origin/master、「Gitリファレンス」のリモート」セクションをお読みください。


1
.git / refs / remotes / origin / branchNameが何であるか説明できますか?このソリューションは私にとって
うまくいき

44

参照が壊れてしまうことがどのように発生するかを追加したいと思います。

考えられる根本的な原因

私のシステム(Windows 7 64ビット)では、BSODが発生すると、保存されている参照ファイルの一部(おそらく現在BSODが発生したときに開かれている/書き込まれている)がNULL文字(ASCII 0)で。

他の人が述べたように、それを修正するには、それらの無効な参照ファイルを削除し、リポジトリを再フェッチまたは再プルするだけで十分です。

エラー: cannot lock ref 'refs/remotes/origin/some/branch': unable to resolve reference 'refs/remotes/origin/some/branch': reference broken

解決策:ファイルを削除します%repo_root%/.git/refs/remotes/origin/some/branch


1
Windows 10 64ビットで同じシナリオ-BSODが発生したときにgitリポジトリで作業します。error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference brokengit pull返された最初のファイルを削除した後でしようとするとfatal: update_ref failed for ref 'HEAD': cannot lock ref 'HEAD': unable to resolve reference 'refs/heads/master': reference broken。2番目のファイルを削除した後、git pull origin master成功しました。
cjmcdonn 2018

39

私はこれと同じ問題を抱えており、エラーが発生したファイルに移動することで解決しました:

\repo\.git\refs\remotes\origin\master

このファイルはnullでいっぱいだったので、githubからの最新のrefに置き換えました。


2
同じ問題がありましたが、ファイル.git/refs/remotes/origin/masterは空でした。それを削除することで問題を解決しました。
zinovyev 2016

38

私の場合、問題はディレクトリの下にあるすべての削除参照ファイルを削除した後で解決されました.git

メッセージを見ると、削除する必要があるファイルが(具体的に)わかります。

削除するファイルはの下にあり.git/refs/remotesます。

そこですべてのファイルを削除し、gc pruneを実行しました

git gc --prune=now

その後、すべてがうまく動作します。


私の場合、私は.git / refs / remotesを削除してから、サーバーを更新してプッシュし、うまくいきました。
Faraz Ahmed 2017

ウリありがとう。私の場合、私はrefs / remotes / origin / featureの下のファイルを削除しただけでした
-git

26

説明:ローカル参照が更新されておらず、存在しない参照を指しているにもかかわらず、リモートリポジトリ(Github / bitbucket内)のブランチが削除されたようです。

この問題を解決するには:

git fetch --prune
git fetch --all
git pull

追加の参考資料-Githubドキュメントからの参照:

git-fetch fetch-別のリポジトリからオブジェクトと参照をダウンロードします

- すべて すべてのフェッチします。

--prune フェッチ後、リモートに存在しないリモート追跡ブランチを削除します。


1
これは私のために働きました
Onengiye Richard

1
おかげで、うまくいきました。
サム

17

git fetch --prune 私のためにこのエラーを修正しました:

[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:25]
[I]> git fetch
error: cannot lock ref 'refs/remotes/origin/user/janek/integration/20170505': 'refs/remotes/origin/user/janek/integration' exists; cannot create 'refs/remotes/origin/user/janek/integration/20170505'
From github.com:zooxco/driving
 ! [new branch]            user/janek/integration/20170505 -> origin/user/janek/integration/20170505  (unable to update local ref)
From github.com:zooxco/driving
[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:30]
[I]> git fetch --prune
 - [deleted]               (none)     -> origin/user/janek/integration

ただし、これは問題のあるブランチがリモートで削除されたと想定しています。


あなたの例は不完全なようです:それは--prune私が見ることができるものを示していません。また、proTip:例を貼り付けた後、不要なパスワードプロンプトを削除します。
MarkHu 2017

あなたは完全に正しい-私はフェッチコマンドからの出力を省略しましたが、私はそれを例に入れました。パスワードプロンプトの削除に関するヒントもありがとうございます。
marczych 2017

11

でもどちらかによって答えを適用した後、再発された。このエラー「ローカル参照を更新することができません」の場合Vojtechビテックミシェル・クレイマー、あなたのローカルおよびマスターリポジトリに悪い参照を持っている場合があります。

この場合、間に修正を入れたり押したりせずに両方の修正を適用する必要があります...

rm .git/refs/remotes/origin/master
git fetch
git gc --prune=now
git remote prune origin

私にとって永続的な解決策は、プッシュ/プルの前に両方の修正を適用した後にのみ達成されました。


1
これをありがとう。失敗したブランチで「master」を置き換えたことに注意してください。例:-rm .git / refs / remotes / origin / develop
Damien Sawyer

1
本当にありがとうございました!
naffiq

1
これは私foが働いていた
byJeevan

10

簡単に言えば、この問題は、ローカルにリモートに関する情報があり、誰かが何かを変更したためにリモートと変更が非同期になったときに発生します。

誰かがリモートブランチを削除し、同じ名前で再度作成したため、この問題が発生しました。

このような問題に対処するには、リモートからプルまたはフェッチしてください。

git remote prune origin

または、GUIを使用している場合は、リモートからフェッチを実行します。

ここに画像の説明を入力してください



3

これを試して:

git pull origin Branch_Name

Branch_Name、あなたが現在いるブランチ。

のみを実行するとgit pull、作成された他のすべてのブランチ名もプルされます。

これがあなたがこれを手に入れている理由です:

! [new branch]      split-css  -> origin/split-css  (unable to update local ref)

2

私にとっては、ローカルブランチという名前がfeature/phase2あり、リモートブランチはという名前feature/phase2/data-modelでした。名前の競合が問題の原因だったので、ローカルブランチを削除しました(保持する必要があるものがあれば、名前を変更できます)。


ここに同じ問題-私たちはまた、( -そしてそれは、MacのPCに取り組んではなく1名が、他のない大文字た)発見することが難しい作っマック/ PCケース命名問題だった
ロックステディ

2

もし git gc --prune=now dosen'tヘルプます。(私のような不運)

私がしたことは、プロジェクトをローカルで削除し、プロジェクト全体を再度複製することです。


これは、「エラーメッセージが表示されたため、新しいコンピュータを購入しました」というアプローチです。
ステファンVierkant

2

Towerを使用していますが、何らかの理由でフォルダ名はでした.git/refs/remotes/origin/Github。小文字に変更することで.git/refs/remotes/origin/github問題は解決しました。


1

同じ問題がありました。次の手順に従います

1)問題のあるブランチを他のブランチに切り替える

2)そのブランチを削除する

3)もう一度チェックアウトします。

注:-コミットされていない変更を隠して、元に戻すことができます。



0

composerの更新でも同じ問題が発生しました。しかし、私にとっては、composerキャッシュをクリアして、ベンダーフォルダーのコンテンツを削除した後にのみ機能しました。

rm -rf vendor/*
git gc --prune=now
git pull
composer clear-cache
composer update my/package

0

git bundle作成したファイルからクローンを作成しようとしたときにこの問題が発生しました。リポジトリをクローンできなかったため、他の回答はどれも機能しませんでした(したがってgit gc、ファイルの削除/編集は問題外でした)。

ただし、これを修正する別の方法がありました-ファイルのソース.bundleファイルが次で始まっていました:

# v2 git bundle
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d HEAD
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master

PACK.......p..x...Kj.0...: (and so on...)

vimで4行目を削除するだけで問題が解決しました。


0

SourceTreeの使用中にこの問題が発生しました。私はもう一度引っ張ってみましたが、うまくいきました。私はブランチ(チェックアウト)を素早く切り替えていたと思います:)

私のリポジトリは明らかな破損もなく、比較的協力的であったため、私の状況は投稿者の状況とは少し異なります。


0
 # remove the reference file of the branch "lost"
 rm -fv ./.git/refs/remotes/origin/feature/v1.6.9-api-token-bot-reader

 # get all the branches from the master
 git fetch --all

 # git will "know" how-to handle the issue from now on
 #     From github.com:futurice/senzoit-www-server
 # * [new branch]      feature/v1.6.9-api-token-bot-reader ->
 # origin/feature/v1.6.9-api-token-bot-reader

 # and push your local changes
 git push

0

リポジトリが削除され、同じ名前で作成されたときに同じ問題に直面しました。以下のようにリモートURL再設定したときにのみ機能しました。

git remote set-url origin [GIT_REPO_URL]

リモートURLを確認します。

git remote -v

これで、すべてのコマンドが通常どおり機能するはずです。


0

今日問題が発生しました。

トラブルシューティングの方法:Windowsサーバー上のSourceTreeでは、管理者として実行しようとする場合があります。これにより、ドメイン内のWindows Server 2012 R2上のAtlassian Source Tree 2.1.2.5で「ローカル参照を更新できません」という私の問題が修正されます。

この状況を再現しすぎると、問題の原因が権限の問題であることがわかります。ドリルダウンして根本的な原因を見つけることをお勧めします-おそらくいくつかの特定のファイルは他のユーザーなどによって所有されています-そうでなければ、望ましくない副作用があります:残りの永遠にSourceTreeを管理者として実行する必要があります。


まあ、私はこれをお勧めしません。不正な権限を持つさらに多くのファイルが作成されます。また、リポジトリファイルを操作するすべてのものを管理者として実行する必要があります。そもそもパーミッションを単純に修正した方がいいのではないですか?
David FerenczyRogožan18年

あなたが正しい。しかし、それを管理者として機能させて初めて、それが許可の問題であることがわかりました。したがって、これは私の診断手順の1つのステップであり、完全な解決策そのものではありませんでした。
Lionet Chen

承知しました。しかし、多くのユーザーは、結果を実際に知らなくても、あなたの答えを解決策として受け入れるかもしれません。推奨される解決策として権限の修正を追加した方がいいかもしれません。
David FerenczyRogožan18年

0

この問題を引き起こす可能性のある特定のケースを書き留めます。

ある日、「feature / subfeature」というブランチをプッシュしましたが、リモートに「feature」ブランチがあります。

その操作は私の側でエラーなしで問題なく動作しましたが、私の同僚がブランチをフェッチしたりプルしたりすると、まったく同じエラーメッセージが表示されましたunable to update local refcannot lock ref 'refs/remotes/origin/feature/subfeature

これはfeature、remote(git push --delete origin feature)でブランチを削除git remote prune originし、同僚のリポジトリで実行することで解決されました。* [pruned] origin/feature

だから、私の推測はgitのフォルダーに内部で参照git fetchを作成しようとしていた(.git / ...)が、すでに参照があったためフォルダーの作成に失敗した。subfeaturefeaturefeature


0

この問題は、Macの開発者がブランチ名に「>」より大きい記号を使用してブランチを作成したときに発生しました。

これにより、TeamCity、およびSourceTreeを実行しているローカルのWindowsベースのコンピューターで問題が発生しました。BitBucketは問題なく通過しました。

ユーザーを解決するには、ブランチを削除して再作成しました。それは素晴らしくて簡単でした。


-1

同じメッセージを持っていますが、ディレクトリがあり、プルで失敗したメッセージを受け取りました。

git --proneも私を助けませんでした。リモートで作成されたディレクトリと同じ名前のファイルがあったことがわかりました。

.git \ logs \ refs \ remotes \ originに移動してロケールファイルを消去する必要がありました。その後、もう一度プルしてください。

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