Błąd Git przy git pull (nie można zaktualizować lokalnego odniesienia)


117

Mam tylko gałąź master i otrzymuję ten błąd za każdym razem, gdy próbuję „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)

a kiedy robię „git pull origin master”, otrzymuję:

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

szukałem, ale nie mogę znaleźć powodu


2
Gdzie jest lokalne repozytorium? Czy utworzyłeś go jako innego użytkownika niż ten, którego używasz do wykonywania ściągania? To brzmi jak problem z uprawnieniami do pliku.
tpg2114

Tak, zaraz po tym, jak powiedziałeś, że właścicielem plików projektu był inny użytkownik, teraz moje pytanie wydaje się takie głupie, ale dałeś mi odpowiedź, proszę, zrób odpowiedź, aby wybrać ją jako najlepszą;)
user115561

proszę @ tpg2114 dodaj to jako odpowiedź, aby ją wybrać
user115561

Odpowiedzi:


264

Mój zespół i ja napotkaliśmy ten błąd, nie mogąc zaktualizować lokalnego odniesienia , podczas ściągania SourceTree.

Użyliśmy:

git gc --prune=now

Spowoduje to usunięcie wszelkich zduplikowanych obiektów referencyjnych, które powinny rozwiązać problem.

Oto kilka linków, w których możesz dowiedzieć się więcej o odwołaniach do git i przycinaniu :

git wskazówka tygodnia

dokumentacja git-prune

referencje git


1
U mnie też zadziałało, ta sama wiadomość, Sourcetree w systemie Windows 7
James Westgate

2
właśnie zaczął mieć ten problem. Wielkie dzięki! działało idealnie!
ddrossi93

3
Może potrzebować obu tych poleceń: git gc --prune=now git remote prune originze stackoverflow.com/questions/2998832/ ...
bryan

1
Próbowałem git remote prune origini to nie zadziałało. Ale potem spróbowałem git gc --prune=nowi zadziałało! Nie jestem pewien, czy oba były potrzebne w tej kolejności, czy tylko w tej.
Anurag

1
Kolejny tajemniczy problem z gittym prowadzi do przydatnego postu StackOverflow z zwięzłym rozwiązaniem.
ijoseph

130

Rozwiązałem jak poniżej:

git remote prune origin


6
Eureka! To rzeczywiście zadziałało. Ma to coś wspólnego ze zmienionymi nazwami oddziałów odległych lub coś w tym rodzaju. Nie będę próbował tego wyjaśniać.
TheSoftwareJedi

8
To zrobiło to dla mnie, git gc --prune=nownic nie dało
Josh G

3
podobnie. to działa dla mnie. git gc --prune = teraz nie działa dla mnie.
Tony

17

z gitbach line commande użyj, git update-refaby zaktualizować odniesienie do lokalnego oddziału:

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

następnie pociągnij za pomocą $ git pull

[locked branch name] to nazwa gałęzi, w której występuje błąd z powodu niedopasowania identyfikatorów zatwierdzenia.


13

Spróbuj użyć tego polecenia w folderze głównym repozytorium git:

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

Gdzie jest ten folder w systemie Windows?
Kanion Kolob

Znalazłem to. Jest to katalog, do którego sklonowałeś
Kolob Canyon

12

Odkryłem ten sam komunikat o błędzie podczas próby ściągnięcia z repozytorium Bitbuck do mojej kopii lokalnej. Jest też tylko jeden Branche Master, a polecenie git pull origin masterprowadzi do tego komunikatu o błędzie

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

Rozwiązanie w następujący sposób

  1. git reflog znajdź numer ostatniego zatwierdzenia
  2. git reset --hard <numnber> reset do ostatniego zatwierdzenia
  3. git pull origin master pociągnij ponownie bez błędu

10

rm .git/refs/remotes/origin/master

Na mnie to działa!


8

Upewnij się, że użytkownik, który wykonuje program, git pulljest tym samym użytkownikiem, który utworzył repozytorium. Uprawnienia do pliku są nieprawidłowe.


Dla mnie musiałem zmienić właściciela plików w repozytorium, które próbowałem przeciągnąć do właściwego użytkownika za pomocą chown. Myślę, że w zasadzie to właśnie mówiłeś, chociaż nie było to dla mnie oczywiste, kiedy to czytałem.
Dee

Zgadzam się z tym, sprawdź, czy właściciel i grupa są ustawieni na użytkownika, który chce pobrać repozytorium ".git" (zdarza się, jeśli wyciągnąłeś gałąź jako "root"), a "sudo chown -R" wykonało zadanie w moim przypadku.
jo_


2

Zdarzyło mi się to na OSX, gdzie używam systemu plików niewrażliwego na wielkość liter. Jakoś inny deweloper popchnął oddział o tej samej nazwie, ale innym przypadku: My-Branchvs my-branch.

Już miałem My-Branch wyewidencjonowałem i otrzymałem błąd „nie można zaktualizować lokalnego odniesienia”, gdy wykonałem ściąganie, prawdopodobnie dlatego, że system plików myśli My-Branch==my-branch .

Ponieważ używamy Githuba, mogłem rozwiązać problem, usuwając jedną z gałęzi za pośrednictwem GUI Githuba.


W moim przypadku obie sprzeczne gałęzie należały do ​​innego użytkownika, więc nie mogłem usunąć jednej. Zamiast tego usunąłem plik ref oddziału w .git \ refs \ remotes i to go naprawiło (tymczasowo - problem będzie wracał za każdym razem, gdy ściągnę, dopóki inny użytkownik nie usunie jednej z jego gałęzi).
Jana Mandic

Mój problem wynikał również z tego, że oddział lokalny i zdalny miał różną wielkość liter. Usunięcie lokalnego oddziału za pomocą powyższego polecenia prune, a następnie wyewidencjonowanie z pochodzenia rozwiązało problem
opis

1

Ten błąd z (nie można zaktualizować lokalnego odniesienia) może się również zdarzyć, jeśli ostatnio zmieniłeś hasła i jest kilka fajnych rzeczy integrujących twoje loginy w systemie Windows i Linux.


1

Rozmowa od użytkownika komputera - Uruchom ponownie.

Szczerze, to zadziałało na mnie. W ten sposób rozwiązałem dwa dziwne problemy z gitem, które uważałem za zepsute.


1

Jest to prawdopodobnie bardzo niszowa sytuacja, ale: Uruchamiam system Windows na maszynie wirtualnej Parallels na moim MacBooku Pro, z lokalnymi repozytoriami przechowywanymi na dysku maszyny wirtualnej, który jest współdzielony z systemem macOS.

Jeśli mam otwarty plik w aplikacji Mac z repozytorium znajdującego się na maszynie wirtualnej z systemem Windows, czasami pojawia się błąd „nie można zaktualizować lokalnego odniesienia”. Rozwiązaniem w takim przypadku jest po prostu zamknięcie pliku lub zamknięcie aplikacji Mac.


1

Co tu się stało? Lokalne odniesienia do twoich zdalnych gałęzi zostały zmienione i dlatego po uruchomieniu git pullgit nie znajduje żadnych odpowiednich zdalnych gałęzi i dlatego kończy się niepowodzeniem.

git remote prune origin

faktycznie czyści te lokalne odniesienia, a następnie uruchamia się git pullponownie.

Sugestia - --dry-rundla bezpieczeństwa skorzystaj z opcji


0

Miałem ten sam problem na moim serwerze debian, ponieważ dysk jest pełny. Nie można utworzyć pliku tymczasowego, ponieważ na urządzeniu nie ma wolnego miejsca. Po wyczyszczeniu niektórych plików wyszło dobrze.


0

Ta praca dla mnie

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

Wątpię, czy to pomaga - a nawet w ogóle działa. Aby mnie przekonać, dodaj wyjaśnienie, jak to powinno działać i dlaczego ma pomóc w rozwiązaniu problemu. Podkreślenie różnic w pozornie podobnych istniejących odpowiedziach byłoby dodatkowym atutem. Zwłaszcza ten, który uzyskał uznanie Babaka.
Yunnosch

0

Miałem ten sam błąd, aktualizowałem z Eclipse i otrzymałem wiele błędów. Więc próbowałem aktualizować z okna poleceń DOS i otrzymałem ten sam problem.

Następnie wypróbowałem rozwiązanie „git gc --prune = now”, które dało komunikat, że pliki zostały zablokowane w katalogu refs.

Eclipse musiał mieć zablokowane coś w katalogu „refs”.
Rozwiązaniem, które znalazłem, było po prostu zamknięcie Eclipse. Następnie zaktualizowałem repozytorium z DOS za pomocą polecenia „git PULL” i wszystko działało dobrze.


0

Usuń plik .git / logs / refs / remotes / origin / [Locked Branch Name]


1
Wątpię, czy to pomaga - a nawet w ogóle działa. Aby mnie przekonać, dodaj wyjaśnienie, jak to powinno działać i dlaczego ma pomóc w rozwiązaniu problemu. Podkreślenie różnic w pozornie podobnych istniejących odpowiedziach byłoby dodatkowym atutem. Zwłaszcza ten, który uzyskał uznanie Babaka.
Yunnosch
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.