web-dev-qa-db-ja.com

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

フルメッセージ:

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)
193

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

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

198
krijesta

永続的な修正

git update-ref -dは、このエラーのインスタンスを解決しました。

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

これはリモートには影響しないことに注意してください。

私の場合、後続のgit fetchがそのブランチを再度フェッチし、その後のgitフェッチ/プルは「リモートrefはat but expected」というエラーを発生しなくなりました。

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

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

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

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

37

私はこれを実行して問題を解決しました:

git gc --Prune=now
29
elad silver

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

git gc --Prune=now

git remote Prune Origin

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

17
Narender Gusain

コマンドラインからbranchを削除する必要がありました。

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

そして、手動で行う:

git pull [remote_name] [branch_name]

変更を引き出すことができました。

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

12
jogam5

ハードリセットも問題を解決します

git reset --hard Origin/master
6
mruanova

より明確なステップ

  1. ターミナル内

    cd /.git/refs/remotes/Origin
    
  2. lsを実行すると、いくつかのブランチおよびHEADが表示されます。

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

    rm branchname
    
  4. うまくいかなかった場合は、すべて削除しますbranches/HEAD

    • 引っ張ってもいい

うまくいくことを願っています。

4
shareef

これを試して、それは私のために働いた。ターミナルで:git remote Prune Origin

1
Ranganatha G V

ここに同じケースがありますが、コメントについては何も投稿されていません。私の場合はブランチ(マスター)が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

この問題を解決するには(私の場合)、ブランチがOriginの前にある場合、最初にgit Pushを実行するだけです。

0
Tecnocat

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

0
Luciano

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

ローカルブランチを削除してから、Originブランチgit checkout Origin/my_branchをチェックアウトし、git checkout my_branchを実行して解決しました

0
Black

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

0
Chen Li Yong