web-dev-qa-db-ja.com

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

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を試しましたが、役に立ちませんでした。

481
Gabrielle

次のコマンドを使ってローカルリポジトリをクリーンアップしてみてください。

$ 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>".            
757
Vojtech Vitek

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

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

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

497
Michel Krämer

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

git gc --Prune=now
109
Bernd

私にとっては、エラーが発生しているファイルをフォルダ.git/refs/remotes/Origin/から削除するように働きました。

64

以下のコマンドを実行してください。

rm .git/refs/remotes/Origin/master

git fetch

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

念のために、.git/refs/remotes/Origin/masterが何かを知る必要がある場合は、 Git References Remotes セクションを読んでください。

40

私はこれと同じ問題を抱えていて、それがエラーになっていたファイルに行くことによってそれを解決しました:

\repo\.git\refs\remotes\Origin\master

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

36
Noel Tock

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

メッセージを見れば、それはあなたがどのファイルを削除する必要があるかをあなたに教えてくれるでしょう(具体的に)。

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

私はそこにあるすべてのファイルを削除して、gc Pruneを実行しました。

git gc --Prune=now

その後は、すべてうまくいきます。

34
Uri Shtand

参照が壊れるとどうなるかを追加したいだけです。

考えられる根本的な原因

私のシステム(Windows 7 64-bit)では、a_ bsod _ happens のとき、保存されている参照ファイルのいくつか(たぶん現在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を削除する

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

git gc --Prune=now

git remote Prune Origin

git pull
19
annelorayne

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

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

17
marczych

非常に手短に言えば、この問題はあなたのローカルがリモートについての情報を持っていて、誰かがリモートとあなたの変更を非同期にする何かを変更したときに起こります。

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

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

git remote Prune Origin

またはGUIを使用している場合は、リモートから取得してください。

enter image description here

8
Abhijeet Kamble

git gc --Prune=nowが助けにならないのであれば。 (私のような不運)

私がしたのは、ローカルでプロジェクトを削除し、プロジェクト全体をもう一度複製します。

4
Eric Chen

これを試して:

git pull Origin Branch_Name

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

git pullだけを実行すると、他に作成されたブランチ名もすべて取得されます。

だからあなたがこれを得ている理由です:

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

一緒に仕事ができました

git remote update --Prune
2
user1238353

私は同じ問題を抱えていました。私は次の手順に従います

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

2)その枝を削除する

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

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

1
user2619659

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

1
Nathan Wallace

私はgit Prune Originを使いました、そしてそれは仕事をしました。

1
TheFakeCake

作曲家のアップデートでも同じ問題がありました。しかし、私にとっては、作曲家のキャッシュをクリアし、ベンダーフォルダの内容を削除した後にのみ機能しました。

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

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

git remote set-urlオリジン[GIT_REPO_URL]

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

git remote -v

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

0
Ricky Boy

SourceTreeを使用している間、私はこの問題を抱えていました。私はもう一度引っ張ろうとしました、そしてそれは働きました。私はあまりにも早くブランチをチェックしていました(チェックアウト):)。

私の状況はポスターのものとは少し異なります。というのも、私のリポジトリは、明らかに破損することなく比較的協力的であったからです。

0
Pysis

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

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

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

0
dylanT
 # 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
Yordan Georgiev

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

ある日、私は "feature/subfeature"という名前のブランチをプッシュしましたが、 "feature"ブランチはリモートにありました。

その操作は私の側では何のエラーもなくうまく働きましたが、私の同僚が任意のブランチを取得したり引っ張ったりしたとき、それらはすべて同じエラーメッセージunable to update local refcannot lock ref 'refs/remotes/Origin/feature/subfeatureを持っていました。

これは、remote(git Push --delete Origin feature)のfeatureブランチを削除してから、同僚のレポジトリでgit remote Prune Originを実行することで解決され、* [pruned] Origin/featureを含むメッセージが生成されました。

そのため、git fetchは内部的にgitのsubfeatureフォルダーにfeature refを作成しようとしていましたが(.git/...)、feature refが既に存在していたためフォルダーの作成に失敗しました。

0
ik1ne

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

今日問題にぶつかった。

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

あなたもこの状況を再現することができれば、それは問題が許可の問題が原因であることを証明しています。ドリルダウンして根本的な原因を見つけるのが賢明です - おそらく特定のファイルは他のユーザが所有しているなど - そうでなければ歓迎されない副作用があります。

0
Lionet Chen