フルメッセージ:
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)
大文字と小文字を区別しないファイルシステム(WindowsまたはOS X)でgitを実行している場合、同じ名前で大文字と小文字が異なる2つのブランチがある場合に発生します。 user_model_changes
およびUser_model_changes
は、両方のリモートブランチが同じ追跡参照に一致するためです。
間違ったリモートブランチを削除し(大文字と小文字のみが異なるブランチは使用しないでください)、git remote Prune Origin
とすべてが機能するはずです
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
\.git\refs\remotes\Origin
の下のフォルダーとファイルを削除するだけです。プッシュされていない変更がない場合に機能します。
私はこれを実行して問題を解決しました:
git gc --Prune=now
以下の2つのコマンドを1つずつ使用します。
git gc --Prune=now
git remote Prune Origin
これで問題が解決します。
コマンドラインからbranchを削除する必要がありました。
.git\refs\remotes\{my remote}\{**my branch**}
そして、手動で行う:
git pull [remote_name] [branch_name]
変更を引き出すことができました。
注:SourceTreeを使用していたため、プルを実行できませんでした。
ハードリセットも問題を解決します
git reset --hard Origin/master
より明確なステップ
ターミナル内
cd /.git/refs/remotes/Origin
ls
を実行すると、いくつかのブランチおよびHEADが表示されます。
問題があると思われるブランチを削除します
rm branchname
うまくいかなかった場合は、すべて削除しますbranches/HEAD
うまくいくことを願っています。
これを試して、それは私のために働いた。ターミナルで:git remote Prune Origin
。
ここに同じケースがありますが、コメントについては何も投稿されていません。私の場合はブランチ(マスター)が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を実行するだけです。
git for-each-ref --format = 'delete%(refname)' refs/original | git update-ref --stdin git reflog expire --expire = now --all git gc --Prune = now
リモートブランチにすでにプッシュしているにもかかわらず、古いコミットにリセットしたために発生した同じ問題がありました。
ローカルブランチを削除してから、Originブランチgit checkout Origin/my_branch
をチェックアウトし、git checkout my_branch
を実行して解決しました
私はこれが古いことを知っていますが、私自身の修正があります。ソースツリーを使用しているため、誰かが新しいブランチを作成するため、このエラーが発生します。ソースツリーはこれについて混乱しています。 「プルするリモートブランチ」コンボボックスの横にある「更新」ボタンを押した後、sourcetreeがブランチリストを更新したようで、正常にプルできるようになりました。