git pull error:error:remote ref is at at expected


227

メッセージ全体:

error: Ref refs/remotes/origin/user is at 3636498c2ea7735fdcedc9af5ab3c8689e6abe77 but expected a21359c6cc2097c85775cde6a40105f4bd7100ec
From github.com:{github project url}
 ! a21359c..6273ffc  user -> origin/user  (unable to update local ref)

3
どうやら誰かがリポジトリの履歴を書き直したようですgit push --force。実行してみてくださいgit pull --force
xaizek

1
git push --forceで同じエラーが発生する
Sanjeev Kumar Dangi

5
この質問への答えは、このエラーを解決- stackoverflow.com/questions/3046436/...
サンジーバ・クマールDangi

回答:


225

大文字と小文字を区別しないファイルシステム(WindowsまたはOS X)でgitを実行している場合、これは同じ名前で大文字が異なる2つのブランチがある場合に発生します。たとえばuser_model_changesUser_model_changes両方のリモートブランチが同じ追跡参照と一致する場合などです。 。

間違ったリモートブランチを削除し(大文字と小文字のみが異なるブランチは使用しないでください)、その後git remote prune originすべてが機能するはずです。


ご回答ありがとうございます。これは、このエラーの問題ではありませんでした。私はこの問題の解決策をすでに見つけており、質問の下のコメントに投稿しました。
Sanjeev Kumar Dangi 2012

2
Mac OS Xにも役立ちます(デフォルトのファイルシステムでは大文字と小文字が区別されません)。
Tammo Freese 2013

12
はい、Windowsで大文字と小文字を区別しない問題が原因で問題が発生しました。.git\refs\remotes\originフォルダー内の参照を手動で削除して修正しましgit pullた。
Roy Ling、

.gitフォルダーの場所がわからない場合は、Project / workspaceフォルダー内に作成されます:D
kumar

1
これはgitバグです(少なくともエラーメッセージは間違っています)。誰かがこのバグをgitプロジェクトに報告してくれることを願っています。gitプロジェクトにバグを報告するのは難しいようです。github.com/git/git
ブロンズ男

190

恒久的な修正

git update-ref -d このエラーの私のインスタンスを解決しました、例えば

git update-ref -d refs/remotes/origin/user

これはリモートには影響しません。

私の場合、後続のgit fetchブランチが再度フェッチされ、その後のgitフェッチ/プルで「リモート参照は存在するが期待されている」というエラーが発生しなくなりました。

それが機能しない場合、一時的な修正:

また、問題のブランチを気にしない場合(たとえば、オリジン/ユーザーではなく、マスターを更新したいだけの場合)、git pull回避策は、関心のある特定のブランチをフェッチしてマージすることです。

git fetch # may give an error for a particular branch, but other branches will still be successfully fetched
git merge origin/master

これは、リモートに触れることなく問題を解決するため、受け入れられる解決策です。
チェルノ

52

の下のフォルダとファイルを削除するだけです\.git\refs\remotes\origin。プッシュされていない変更がない場合に機能します。


これは、リモート参照が「パック」されており、したがってrefs / remotes / **にない場合は機能しない可能性があります。@ JDiMatteoのソリューションは引き続き機能するはずです
Alexander Bird

2
私のために働いた。トンありがとう!
Swapnil Patwa

魅力のように働いた!ありがとう!
Anurag S Sharma

43

私は問題を解決するためにこれを実行しました:

git gc --prune=now

2
これで問題が解決しました。
アーミルリズワン2018

2
私にとっても..---:)
Aravind R Pillai

3
おかげで、この解決策は私にとって修正されました。提供したソリューションについてもう少し詳しく説明していただけますか。
Aamol

1
基本的にそれは単なるgitガベージコレクターツールなので、同期されていないがキャッシュ目的でローカルコンピューター上にあるものはすべて消去されます
elad silver

42

以下の2つのコマンドを1つずつ使用します。

git gc --prune=now

git remote prune origin

これで問題が解決します。


1
これは私にとってはうまくいきますが、別のgit pullを実行すると、この問題が再び発生します
Jojin

@常神あなたと同じです。そして最後に、プラカシュサラバナンが提供する方法を選択しました
xi.lin

1
これはgitファイルを編集するための提案よりも高く評価する必要があります:)
Mike Wise

このソリューションだけが私にとってうまくいきました。ありがとう!
insaineyesay

12

次の場所でコマンドラインからブランチを削除する必要がありました。

.git\refs\remotes\{my remote}\{**my branch**}

そして手動で行う:

git pull [remote_name] [branch_name]

変更をプルすることができました。

注:SourceTreeを使用していて、プルを実行できませんでした。


最終的に私は自分のリモコンの名前を変更しました。SourceTreeの履歴に2つのリモコン「Bitbucket / staging」と「bitbucket / staging」がありましたが、実行するとコマンドラインに「Bitbucket」しか表示されませんでした:git remote -v。そのため、Bitbucketの名前をbitbucketに変更し、競合がようやく解消しました。これがSourceTreeユーザーの可能性を高めるのに役立つことを願っています。
jogam5 2016年

また、.git\packed-refs修正される前にブランチを削除する必要がありました。
マイケル


5

より明確なステップ

  1. ターミナルで

    cd /.git/refs/remotes/origin
    
  2. すると ls、いくつかのブランチHEADが表示されます

  3. 問題があると思われるブランチを削除します

    rm branchname
    
  4. 機能しない場合は、すべてのブランチ/ヘッドを削除します

    • あなたはワナを引くかもしれません

それが今うまくいくことを願っています。


これは本質的に同じgit update-ref -d <branchname>ですか?
jt000

2

これを試してください、それは私のために働きました。端末で:git remote prune origin


2

残念ながら、プルーンやリセット、プッシュなどのGITコマンドは機能しませんでした。Pruneが1回動作した後、問題が再発しました。

私のために働いた永続的な解決策は、gitファイルを手動で編集することです。プロジェクトの.gitフォルダに移動し、Notepad ++などのテキストエディタでpacked-refsファイルを開きます。次に、失敗したブランチのある行に移動し、そのGUIDを期待されるものに更新します。

次のようなメッセージがある場合:

「エラー:参照「refs / remotes / origin / feature / branch_xxx」をロックできません:425ea23facf96f51f412441f41ad488fc098cf23ですが、383de86fed394ff1a1aeefc4a522d886adcecd79が必要です」

次に、ファイル内で「refs / remotes / origin / feature / branch_xxx」の行を見つけます。そこには、GUID(2番目)が予想されます-383de86fed394ff1a1aeefc4a522d886adcecd79。実際の(1番目の)425ea23facf96f51f412441f41ad488fc098cf23に変更する必要があります。

失敗している他のブランチについても同じ手順を繰り返します。先に進んでください。ときどき、再フェッチ後、以前にすでに「修正」した同じブランチについて繰り返す必要がありました。GITを再フェッチすると、GUIDが更新され、最新のものが提供されます。

とにかく、問題はショーストッパーではありません。ブランチリストが更新されます。これはむしろ警告です。


1

git for-each-ref --format = 'delete%(refname)' refs / original | git update-ref --stdin git reflog expire --expire = now --all git gc --prune = now


0

ここでは同じケースですが、投稿されたコメントについては何も正しくありません。私の場合、ブランチ(マスター)は1つだけで、Unixファイルシステムのみを使用しています。このエラーは、git fetch --progress --prune originを実行するとランダムに発生し、ブランチが先ですまたは「origin / master」。誰もコミットできません。1人のユーザーだけがプッシュできます。

注:私はacmeリポジトリにサブモジュールがあり、acmeには新しいサブモジュールの変更(新しいコミット)があります。最初にgit submodule updateでサブモジュールを更新する必要があります。

[2014-07-29 13:58:37] Payload POST received from Bitbucket
[2014-07-29 13:58:37] Exec: cd /var/www/html/acme
---------------------
[2014-07-29 13:58:37] Updating Git code for all branches
[2014-07-29 13:58:37] Exec: /usr/bin/git checkout --force master
[2014-07-29 13:58:37] Your branch is ahead of 'origin/master' by 1 commit.
[2014-07-29 13:58:37]   (use "git push" to publish your local commits)
[2014-07-29 13:58:37] Command returned some errors:
[2014-07-29 13:58:37] Already on 'master'
---------------------
[2014-07-29 13:58:37] Exec: /usr/bin/git fetch --progress --prune origin
[2014-07-29 13:58:39] Command returned some errors:
[2014-07-29 13:58:39] error: Ref refs/remotes/origin/master is at 8213a9906828322a3428f921381bd87f42ec7e2f but expected c8f9c00551dcd0b9386cd9123607843179981c91
[2014-07-29 13:58:39] From bitbucket.org:acme/acme
[2014-07-29 13:58:39]  ! c8f9c00..8213a99  master     -> origin/master  (unable to update local ref)
---------------------
[2014-07-29 13:58:39] Unable to fetch Git data

この問題を解決するには(私の場合)、ブランチがオリジンより先にある場合は、最初にgit pushを実行します。


3
ここでのあなたの答えは、ローカルリポジトリが新しいコミットの後でオリジンより先にあるという事実にのみ関連しています。これはローカルのgit commit操作の自然な状態であり、元の質問とは関係ありません。
熱狂的な

0

私はこれが古いことを知っていますが、私自身の修正があります。ソースツリーを使用しているため、このエラーは誰かが新しいブランチを作成したために発生します。ソースツリーはこれについて混乱しています。「プルするリモートブランチ」コンボボックスの横にある「更新」ボタンを押すと、sourcetreeがブランチリストを更新したように見え、正常にプルできるようになりました。


0

すでにリモートブランチにプッシュしたにもかかわらず、古いコミットにリセットしたために発生した同じ問題がありました。

ローカルブランチを削除してから、元のブランチgit checkout origin/my_branchをチェックアウトして実行することで解決しましたgit checkout my_branch


-1

絶えず検索した後、これは私のために働いた解決策であり、アップストリームの設定解除/削除を伴います

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