git pullのGitエラー(ローカル参照を更新できません)


115

私はブランチマスターしか持っておらず、「git pull」しようとするたびにこのエラーが発生します:

error: Couldn't set refs/remotes/origin/master
From /var/lib/git/xxx/project
 ! a0f80ea..49177a3  master     -> origin/master  (unable to update local ref)

「git pull origin master」を実行すると、次のようになります。

error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

私は探していましたが、理由がわかりません


2
ローカルリポジトリはどこですか?プルの実行に使用しているユーザーとは別のユーザーとして作成しましたか?ファイルのアクセス許可の問題のようです。
tpg2114 2012

ええ、あなたはプロジェクトファイルの所有者が別のユーザーであると言った直後です、今私の質問はばかげているようですが、あなたは私に答えを与えました、それを最良のものとして選択するための答えにしてください;)
user115561

@ tpg2114を選択した回答としてこれを追加してください
user115561

回答:


262

私のチームと私は、SourceTreeでプルを行っているときに、ローカルエラーを更新できずにこのエラーに遭遇しました。

私たちは使用しました:

git gc --prune=now

これにより、問題を修正するはずの重複する参照オブジェクトが削除されます。

gitの参照とプルーニングについて詳しく学ぶことができるいくつかのリンクを次に示します

今週のgitヒント

git-pruneのドキュメント

gitリファレンス


1
同じメッセージ、Windows 7のSourcetree
James Westgate

2
この問題も発生し始めました。本当にありがとう!完璧に働いた!
ddrossi93

3
:これらのコマンドの両方が必要な場合がありgit gc --prune=now git remote prune originからstackoverflow.com/questions/2998832/...
ブライアン

1
試してみましgit remote prune originたがうまくいきませんでした。しかし、その後これを試してみましたがgit gc --prune=now、うまくいきました!両方がこの順序で必要だったのか、それともこの1つだけが必要だったのかはわかりません。
Anurag

1
それに関するさらに別の不可解な問題gitが、簡潔なソリューションを備えた有用なStackOverflow投稿につながります。
ijoseph

126

私は以下のように解決しました:

git remote prune origin


6
ユーレカ!それは確かに働きました。名前が変更されたブランチリモートまたは何かと関係があります。私はそれを試して説明するつもりはありません。
TheSoftwareJedi 2017

8
これは私のためにそれをしました、git gc --prune=now何もしませんでした
ジョシュG

3
同じ。これは私にとってはうまくいきます。git gc --prune = nowが機能しませんでした。
Tony

16

gitbach line commandeを使用git update-refして、ローカルブランチの参照を更新するために使用します。

$ git update-ref -d refs/remotes/origin/[locked branch name]

それから引っ張って $ git pull

[locked branch name] コミットIDの不一致のためにエラーが発生しているブランチの名前です。


13

gitリポジトリのルートフォルダーでこのコマンドを使用してみてください。

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

Windowsのこのフォルダはどこにありますか?
コロブキャニオン

見つけた。クローン先のディレクトリです
Kolob Canyon

12

Bitbuck Repoからlokalコピーにプルしようとしている同じエラーメッセージを発見しました。また、ブランチマスターは1つしかなく、コマンドgit pull origin masterがこのエラーメッセージを導きます。

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

以下の解決策

  1. git reflog 最後のコミットの番号を見つける
  2. git reset --hard <numnber> 最後のコミットにリセット
  3. git pull origin master エラーなしで再度プル

10

rm .git/refs/remotes/origin/master

それは私に働きます!


8

を実行してgit pullいるユーザーが、リポジトリを作成したユーザーと同じであることを確認します。ファイルの権限が正しくありません。


私にとっては、chownを使用して適切なユーザーにgit pull-inしようとしていたリポジトリ内のファイルの所有者を変更する必要がありました。私がこれを読んだとき、私には明白ではありませんでしたが、これは基本的にあなたが言っていたものだと思います。
ディー

私はこれに同意し、所有者とグループが「.git」リポジトリをプルインするユーザーに設定されていることを確認します(「ルート」であるブランチをプルした場合に発生)。
jo_ 2017年


2

これは、大文字と小文字を区別しないファイルシステムを使用するOSXで発生しました。どういうわけか、別の開発者が同じ名前で大文字と小文字が異なるブランチをプッシュしました:My-Branchvs my-branch

My-Branchおそらくチェックアウトしていて、おそらくファイルシステムがMy-Branch== と考えているためにプルしたときに、「ローカル参照を更新できません」というエラーが発生しましたmy-branch

私たちはGithubを使用しているので、GithubのGUIを介してブランチの1つを削除することで問題を解決できました。


私の場合、競合するブランチは両方とも別のユーザーに属していたため、削除できませんでした。代わりに、.git \ refs \ remotesにあるブランチ参照ファイルを削除し、それを修正しました(一時的に-他のユーザーがブランチの1つを削除するまでプルするたびに問題が再発します)。
Jana Mandic

私の問題は、地元の支店と遠隔地で大文字と小文字が異なることも原因でした。上記のpruneコマンドを使用してローカルブランチを削除してから、オリジンからチェックアウトすることで解決しました
説明

1

このエラー(ローカル参照を更新できない)は、最近パスワードを変更し、WindowsとLinuxのログインを統合するいくつかの凝ったものがある場合にも発生する可能性があります。


1

PCユーザーから話す-再起動します。

正直なところ、それは私のために働いた。私はこの方法で破損だと思った2つの奇妙なgitの問題を解決しました。


1

これはおそらく非常にニッチな状況ですが、MacBook ProのParallels VMでWindowsを実行し、ローカルリポジトリはmacOSと共有されるVMのディスクに保存されています。

Windows VMにあるリポジトリからMacアプリでファイルを開いていると、「ローカル参照を更新できません」エラーが発生することがあります。これが発生した場合の解決策は、単にファイルを閉じるか、Macアプリを終了することです。


1

ここで何が起こったのですか?リモートブランチへのローカル参照が変更されたため、を実行するとgit pull、gitは対応するリモートブランチを見つけられず、失敗します。

git remote prune origin

このローカル参照を実際にクリーンアップしてから、git pull再度実行します。

提案- --dry-run安全のためにオプションを指定して実行してください


0

ディスクがいっぱいなので、debianサーバーでも同じ問題が発生しました。デバイスに空き領域がないため、一時ファイルを作成できませんでした。いくつかのファイルをクリーニングした後、それはうまくいきました。


0

この仕事は私にとって

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

これが役立つか、あるいはまったく機能しないかは疑問です。そうでなければ私を説得するために、これがどのように機能するべきか、なぜそれが問題を助けると思われるのかについての説明を追加してください。一見類似している既存の他の回答との違いを強調するとボーナスになります。特にババクが賛成したもの。
ユンノシュ

0

同じエラーが発生しました。Eclipse内から更新していると、多くのエラーが発生しました。そこで、DOSコマンドウィンドウから更新を試みたところ、同じ問題が発生しました。

次に、「git gc --prune = now」という解決策を試しました。これにより、refsディレクトリでファイルがロックされているというメッセージが表示されました。

Eclipseは、「refs」ディレクトリ内の何かをロックしている必要があります。
私が見つけた解決策は、単にEclipseを閉じることでした。次に、DOSから「git PULL」コマンドでリポジトリを更新しましたが、すべて正常に動作しました。


0

ファイル.git / logs / refs / remotes / origin / [ロックされたブランチ名]を削除します


1
これが役立つか、あるいはまったく機能しないかは疑問です。そうでなければ私を説得するために、これがどのように機能するべきか、なぜそれが問題を助けると思われるのかについての説明を追加してください。一見類似している既存の他の回答との違いを強調するとボーナスになります。特にババクが賛成したもの。
ユンノシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.