Помилка Git при потягуванні 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", я отримую:

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

Я шукав, але не можу знайти чому


2
Де локальний сховище? Ви створили його як інший користувач, ніж той, який ви використовуєте для виконання тягнення? Це звучить як проблема з дозволом на файл.
tpg2114

Так, ти маєш рацію після того, як ти сказав, що власник файлів проекту був іншим користувачем, тепер моє запитання здається таким дурним, але ти дав мені відповідь, будь ласка, зроби це відповідь, щоб вибрати його як найкращого;)
user115561

будь ласка @ tpg2114 додайте це як відповідь, щоб обрати його
user115561

Відповіді:


263

Ми з моєю командою зіткнулися з цією помилкою, не в змозі оновити місцевий номер , коли я працював у SourceTree.

Ми використовували:

git gc --prune=now

Це видаляє всі дублікати опорних об'єктів, які повинні вирішити проблему.

Ось декілька посилань, де ви можете дізнатися більше про посилання на git та обрізку :

git tip of the week

документація git-prune

посилання на git


1
Для мене теж працювало те саме повідомлення, Sourcetree в Windows 7
Джеймс Вестгейт

2
щойно почали виникати і це питання. Дякую купу! працював чудово!
ddrossi93

3
Може знадобитися обидві ці команди: git gc --prune=now git remote prune originвід stackoverflow.com/questions/2998832 / ...
Bryan

1
Я спробував, git remote prune originі мені це не вийшло. Але після цього спробував це git gc --prune=now, і все вийшло! Не впевнений, чи потрібні обидва в тому порядку, або лише цей.
Анураг

1
Ще одна криптовалюта з gitцим призводить до корисної публікації StackOverflow із невідкладним рішенням.
ійосеф

128

Я вирішив так:

git remote prune origin


6
Еврика! Це дійсно спрацювало. Це має відношення до віддалених перейменованих гілок або чогось іншого. Я не збираюся це намагатися пояснити.
TheSoftwareJedi

8
Це зробив це для мене, git gc --prune=nowнічого не зробив
Josh G

3
те саме. це працює для мене. git gc --prune = зараз не працює для мене.
Тоні

16

з командним рядком gitbach, використовуйте git update-refдля оновлення посилання на ваш місцевий відділення:

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

потім потягніть за допомогою $ git pull

[locked branch name] - це назва гілки, що помилка трапляється через невідповідність ідентифікатора фіксації.


13

Спробуйте використовувати цю команду в кореневій папці вашого git сховища:

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

Де ця папка в Windows?
Калонь Колоб

Я знайшов це. Це будь-який каталог, який ви клонували
Калонь Колоб

12

Я виявив те саме повідомлення про помилку, що намагався перетягнути з Bitbuck Repo в свою локальну копію. Існує також один головний відділення відділення і команда 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 тягнути знову без помилок


8

Переконайтеся, що користувач, який виконує, git pullце той самий користувач, який створив сховище. Дозволи файлів невірні.


Для мене мені довелося змінити власника файлів у репо, я намагався притягнути до потрібного користувача з chown. Я думаю, що це в основному те, що ви говорили, хоча мені це було очевидно, коли я читав це.
Ді

Я погоджуюсь з цим, переконайтеся, що власник та група налаштовані на користувача, готового запустити ".git" РЕПО (трапляється, якщо ви потягнули гілку "root"), "sudo chown -R" зробив роботу в моєму випадку.
jo_


2

Це сталося зі мною на OSX, де я використовую файлову систему, нечутливу до регістру. Як - то інший розробник штовхнув гілку з такою ж назвою , але в іншому регістрі: My-Branchпроти my-branch.

Я вже My-Branchперевірив і отримав помилку "не в змозі оновити локальну реф", коли я здійснив тягнення, ймовірно, тому, що файлова система думає My-Branch== my-branch.

Оскільки ми використовуємо Github, я міг вирішити проблему, видаливши одну з гілок через GUI Github.


У моєму випадку обидві суперечливі гілки належали іншому користувачеві, тому я не міг її видалити. Натомість я видалив файл ref-відгалуження під .git \ refs \ remotes, і це виправив (тимчасово - проблема повертатиметься кожного разу, коли я потягну, поки інший користувач не видалить одну з його гілок).
Яна Мандич

Моя проблема також була пов'язана з тим, що місцеві відділення та віддалені підприємства мають різну капіталізацію. Видаливши локальну гілку, скориставшись командою prune, наведеною вище, а потім перевірити її походження, її вирішили
опишіть

1

Ця помилка (не в змозі оновити місцевий номер) також може статися, якщо ви нещодавно змінили паролі і є деякі модні речі, що інтегрують ваші входи в Windows та Linux.


1

Виступаючи від користувача ПК - перезавантажте.

Чесно кажучи, це працювало на мене. Я вирішив дві дивні проблеми з git, які, на мою думку, були корупцією.


1

Це, мабуть, дуже ніша ситуація, але: я запускаю Windows у VM Parallels на моєму MacBook Pro, з моїми локальними репостами, що зберігаються на диску VM, який спільно використовується з macOS.

Якщо у мене відкритий файл у додатку Mac від репо, що знаходиться у вікні Windows, я іноді отримую помилку "не в змозі оновити локальну посилання". Вирішенням цього питання є просто закрити файл або вийти з програми Mac.


1

Що тут сталося? Місцеві посилання на ваші віддалені гілки були змінені, а значить, коли ви запускаєте git pull, git не знаходить відповідних віддалених гілок, а значить, він не працює.

git remote prune origin

фактично очищає ці локальні посилання, а потім запускається git pullзнову.

Пропозиція. --dry-runДля безпечної роботи запустіть її


0

У мене був такий самий випуск на моєму сервері debian, коли диск заповнений. Не вдалося створити жодний тимчасовий файл, оскільки на пристрої не залишилось місця. Після очищення деяких файлів це вийшло чудово.


0

Ця робота для мене

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

Я сумніваюся, що це допомагає - або взагалі працює. Щоб переконати мене в іншому, будь ласка, додайте пояснення, як це має працювати і чому це має допомогти у вирішенні проблеми. Виявлення відмінностей, здавалося б, подібних існуючих інших відповідей було б бонусом. Особливо прихильний Бабак.
Yunnosch

0

У мене була така ж помилка, я оновлювався зсередини Eclipse, і я отримав багато помилок. Тож я спробував оновити з вікна команд DOS і отримав ту саму проблему.

Потім я спробував рішення "git gc --prune = now". Це дало повідомлення про те, що файли були заблоковані в каталозі refs.

Eclipse, мабуть, щось заблокував у каталозі "refs".
Я знайшов рішення - просто закрити Eclipse. Потім я оновив сховище з DOS командою "git PULL", і все працювало чудово.


0

Видалити файл .git / logs / refs / Remotes / origin / [Заблокована назва гілки]


1
Я сумніваюся, що це допомагає - або взагалі працює. Щоб переконати мене в іншому, будь ласка, додайте пояснення, як це має працювати і чому це має допомогти у вирішенні проблеми. Виявлення відмінностей, здавалося б, подібних існуючих інших відповідей було б бонусом. Особливо прихильний Бабак.
Yunnosch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.