помилка тягнення git: помилка: віддалений перегляд є, але очікуваний


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
Сандєєв Кумар Дангі

5
Відповідь на це питання вирішила цю помилку - stackoverflow.com/questions/3046436/…
Сандєєв Кумар Дангі

Відповіді:


225

Якщо ви запускаєте git у файловій системі, яка не відрізняється від регістру (Windows або OS X), це відбудеться, якщо є дві гілки з однаковим іменем, але різної великої літери, наприклад, user_model_changesі User_model_changesякщо обидві віддалені гілки будуть відповідати однаковій відстежувальній реф. .

Видаліть неправильну віддалену гілку (у вас не повинно бути гілок, які різняться лише залежно від випадку), а потім git remote prune originі все повинно працювати


дякую за відповідь. У цьому не було проблеми з цією помилкою. Я вже знайшов рішення цього питання і розмістив у коментарі нижче питання.
Саньєєв Кумар Дангі

2
Допомагає і для Mac OS X (файлова система за замовчуванням нечутлива до регістру).
Таммо Фрізе

12
так, проблема, що не враховує регістр у Windows, викликала цю проблему. Я виправив це, вручну видаливши ref в .git\refs\remotes\originпапці, а потім git pullзнову.
Рой Лінг

а для тих, хто не знає, де буде папка .git .. вона буде створена всередині вашої папки Project / radpace: 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 / remote / ** @ Рішення JDiMatteo має працювати тоді все-таки
Олександр Птах

2
Працювали для мене. Дякую тонну!
Swapnil Patwa

Працював як шарм! Дякую!
Anurag S Sharma

43

Я запустив це для вирішення проблеми:

git gc --prune=now

2
Це вирішило для мене проблему.
Аамір Різван

2
для мене теж ...-- :)
Aravind R Pillai

3
Дякую, це рішення виправлено для мене. Поясніть, будь ласка, трохи більше про рішення, яке ви запропонували.
Аамол

1
в основному це лише інструмент збирання сміття, і він видаляє все, що не синхронізується, але є на локальному комп’ютері для кешування
срібло, срібло

42

Скористайтеся наведеними нижче двома командами одна за одною.

git gc --prune=now

git remote prune origin

Це вирішить вашу проблему.


1
Це працює для мене, але коли я виконую ще одну проблему, знову виникає ця проблема
Джоджин

@Jojin Те саме, що і ти. І я нарешті обрав спосіб, який забезпечив Пракаш Сараванан
xi.lin

1
Це слід оцінити вище, ніж пропозиція редагувати файли git :)
Майк Мудрий

тільки це рішення працювало на мене. Дякую!
insaineyesay

12

Мені довелося видалити гілку з мого командного рядка за адресою:

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

а потім робити вручну:

git pull [remote_name] [branch_name]

Я зміг витягнути зміни.

Примітка. Я використовував SourceTree і не зміг зробити тягнення.


У кінцевому рахунку я перейменував свої віддалені програми: у мене було два пульта "Bitbucket / staging" та "bitbucket / staging" в моїй історії SourceTree, але в командному рядку під час виконання: git remote -v з'явився лише "Bitbucket". Тож я перейменував Bitbucket в bitbucket, і конфлікт остаточно зник, сподіваюся, це допомагає, швидше за все, користувачам SourceTree.
jogam5

Я також повинен був видалити гілку, .git\packed-refsперш ніж вона була зафіксована для мене.
Майкл

6

Сильний скидання також вирішить проблему

git reset --hard origin/master

Ви вибрали найкращу відповідь?
mruanova

5

Чіткіші кроки

  1. в терміналі

    cd /.git/refs/remotes/origin
    
  2. зробіть ls, ви побачите деякі гілки та ГОЛОВУ

  3. Видаліть гілку, на яку, на вашу думку, є проблема

    rm branchname
    
  4. Якщо це не спрацювало, видаліть усі гілки / HEAD

    • ви можете потягнути

Сподіваюся, це працює і зараз.


це по суті те саме, що і git update-ref -d <branchname>?
jt000


2

На жаль, команди GIT на зразок обрізання та скидання чи натискання для мене не спрацювали. Prune працював один раз, а потім питання повернулося.

Постійне рішення, яке працювало для мене, - це редагувати файл git вручну. Просто перейдіть у папку .git проекту, а потім відкрийте файл упакований-refs у текстовому редакторі, як Notepad ++. Потім перейдіть до рядка з несправною гілкою та оновіть її орієнтир до очікуваного.

Якщо у вас є повідомлення типу:

"помилка: не вдається заблокувати ref 'refs / remotes / origin / feature / branch_xxx': знаходиться в 425ea23facf96f51f412441f41ad488fc098cf23, але очікується 383de86fed394ff1a1aeefc4a522d886adcecd79"

потім у файлі знайдіть рядок з 'refs / remotes / origin / feature / branch_xxx'. Настанова буде очікуваною (2) - 383de86fed394ff1a1aeefc4a522d886adcecd79. Вам потрібно змінити його на справжнє (1-е) - 425ea23facf96f51f412441f41ad488fc098cf23.

Повторіть для інших несправних гілок, і ви будете готові продовжити. Іноді після повторного отримання доводилося повторювати ті самі гілки, які я вже «виправляв» раніше. При повторному завантаженні GIT оновлює посібники та дає вам найновіші.

У будь-якому разі проблема не є пробкою. Список філій оновлюється. Це скоріше попередження.


1

git for-every-ref --format = 'видалити% (refname)' refs / original | git update-ref --stdin git reflog закінчується --expire = зараз - всі git gc --prune = зараз


0

Тут є той самий випадок, але нічого щодо коментарів, розміщених це правильно, у моєму випадку я маю лише одну гілку (майстер) і використовую лише файлову систему Unix, ця помилка виникає випадковим чином, коли я запускаю git fetch --progress --prune походження і гілка попереду або "походження / головний". Ніхто не може взяти на себе зобов'язання, лише 1 користувач може натиснути.

ПРИМІТКА: У мене є підмодуль у сховищі акме, і в acme є нові зміни підмодуля (нові коміти), мені спочатку потрібно оновити підмодуль з оновленням підмодуля git.

[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 počin і не стосується початкового питання.
Давіент

0

Я знаю, що це старе, але у мене є власне виправлення. Оскільки я використовую вихідне дерево, ця помилка трапляється тому, що хтось створює нову гілку. Дерево-джерело плутається з цього приводу. Після того як я натискаю кнопку "Оновити" поруч із комбобонтом "Віддалена гілка, щоб витягнути", здається, що sourcetree оновила список філій, і тепер я можу успішно витягнути.


0

У мене була та сама проблема, яка була викликана тим, що я перевстановився на старішу програму, хоча я вже перейшов до віддаленої гілки.

Я вирішив це, видаливши свою локальну гілку, потім перевіривши гілку походження, git checkout origin/my_branchа потім виконавшиgit checkout my_branch


-1

Після постійного пошуку, це рішення, яке працювало для мене, що тягне за собою знеструмлення / видалення висхідного потоку

git branch --unset-upstream
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.