Próbuję zaktualizować repozytorium ze zdalnego oddziału i nadal otrzymuję ten błąd, gdy wykonuję polecenie „git pull”. Nie wprowadziłem żadnych lokalnych zmian, a nawet jeśli tak, nie muszę ich zachowywać.
Próbowałem:
git reset --hard
i mam ten sam problem
Jedyną rzeczą, która wydaje się działać, jest usunięcie pliku powodującego problem i ponowne wykonanie polecenia git pull.
Próbowałem również, git stash
a następnie git pull
. Nie idź.
edit: używając PortableGit-1.6.4-preview20090729, więc wszelkie poprzednie błędy z fałszywymi błędami powinny zostać naprawione.
git rm --cached learned/tests/temp_funcs.py
- Ponieważ i tak chciałem, aby plik pozostał na liście niezatwierdzonych plików ,git rm --cached
odblokowałem mnie w tym przypadku.--abort
. Żadne z proponowanych rozwiązań nie pozwoliło mi przerwać, z wyjątkiem usunięcia plików naruszających.Odpowiedzi:
Jest kilka sposobów, aby to naprawić, ale znalazłem git stash dobrze dla mnie. Tymczasowo umieszcza lokalne zmiany w innym miejscu. Następnie możesz pociągnąć, aby pobrać najnowsze zmiany. A potem możesz odzyskać lokalne zmiany.
Takie jak to:
źródło
git rm --cached
, pełny komentarz: stackoverflow.com/questions/1248029/…Może się tak zdarzyć, jeśli zaktualizujesz indeks, aby zignorować określone pliki:
a następnie na przykład do kasy w innej branży:
Wymuszenie odświeżania indeksu rozwiązuje problem:
Śledzony przez:
A potem wszystko powinno wrócić do normy.
źródło
git rm --cached learned/tests/temp_funcs.py
- Ponieważ i tak chciałem, aby plik pozostał na liście niezatwierdzonych plików ,git rm --cached
odblokowałem mnie w tym przypadku.git update-index --really-refresh
Był kawałek brakuje! Dobra robota, trudno było to znaleźćTen rodzaj problemu jest często spowodowany próbą ściągnięcia z repozytorium, które ma dwie nazwy plików różniące się tylko wielkością liter. Jeśli korzystasz z FAT, NTFS w trybie bez rozróżniania wielkości liter (zasadniczo za każdym razem, gdy jest używany w systemie Windows) lub HFS + w trybie bez rozróżniania wielkości liter i masz dwa pliki „foobar” i „FOOBAR”, Git zobaczy dwa różne pliki, ale system plików zobaczy tylko jeden, co spowoduje różnego rodzaju problemy. Git pobierze, powiedzmy „FOOBAR”, a następnie wyewidencjonuje „foobar”, który system plików widzi jako po prostu zastępujący zawartość „FOOBAR”, ale pozostawiający go na miejscu. Teraz dla Gita wygląda na to, że „FOOBAR” został zastąpiony zawartością „foobar”, a „foobar” zniknął.
Istnieją dwa różne przejawy tego podstawowego problemu. Po pierwsze, repozytorium faktycznie zawiera dwa pliki, które różnią się tylko wielkością liter. W takim przypadku musisz pracować na systemie plików uwzględniającym wielkość liter lub będziesz musiał edytować repozytorium, aby upewnić się, że nie wystąpią tego rodzaju kolizje; system plików bez rozróżniania wielkości liter po prostu nie może przechowywać zawartości tego repozytorium.
Innym przypadkiem, który można obejść, jest zmiana nazwy, która zmienia wielkość liter w pliku. Załóżmy na przykład, że repozytorium Git zawiera zmienioną nazwę z „EXAMPLE” na „example”. Zanim Git sprawdzi nową wersję, spróbuje sprawdzić, czy nie nadpisuje istniejącego pliku, który masz na dysku. Ponieważ uważa, że „przykład” jest nową nazwą pliku, zapyta system plików, czy istnieje, a system plików zobaczy „PRZYKŁAD” i powie „tak”, więc Git odmówi pobrania nowej wersji, ponieważ uważa, że zostanie nadpisana nieśledzone pliki. W takim przypadku, jeśli nie masz żadnych lokalnych zmian, na których Ci zależy, prosty plik
git reset --hard <revision-to-checkout>
generalnie wystarczy, aby przejść przez problem i przejść do nowej wersji. Po prostu spróbuj i pamiętaj, aby nie zmieniać nazw plików na inne nazwy, które różnią się tylko w przypadku, gdy jesteś w systemie plików bez rozróżniania wielkości liter, ponieważ spowoduje to takie problemy.źródło
W celu dalszego rozwinięcia postu @Brian Campbell (ponieważ reset ciężki też nie zadziałał), chcę wskazać krytyczny przypadek, który mnie powstrzymywał.
Przeniosłem plik
OldFile
do innego folderu i zmieniłem jego nazwęNewFile
. Następnie oznaczyłem plik jakoassume-unchanged
.To uniemożliwiało mi zmianę gałęzi i nie było skrytki do zapisania lub zobowiązania do pchania. Problem polegał na tym, że nie zatwierdziłem tej zmiany pliku z nową nazwą przed ustawieniem
assume-unchanged
flagi. Ustawiłem więc z powrotem nano-assume-unchanged
, zatwierdziłem, a następnie ustawiłem z powrotem naassume-unchanged
i mogłem ponownie zmienić gałęzie.źródło
checkout -f
, to się nie powiedzie.Ogólnie rzecz biorąc, oznacza to, że masz zmiany w swoich plikach lokalnych, które nie zostały zatwierdzone do lokalnego repozytorium. Możesz również zobaczyć to pytanie o przepełnienie stosu, aby uzyskać nieco więcej szczegółów.
źródło
Widziałem podobny problem (Windows 10): byłem włączony
branchA
i chciałem przejść domaster
. Miałem pewne uncommited zmian więc najpierwgit stash
wtedygit checkout -f master
ale ja wciąż mamEntry 'fileName' not uptodate. Cannot merge
.git status
nie pokazywał nic do popełnienia.W końcu po prostu usunąłem plik ręcznie i mogłem przejść do innej gałęzi (co oczywiście spowodowało powrót mojego pliku), więc myślę, że gdzieś w git pojawił się błąd.
źródło
.gitignore
plikiem! Mimo że nie wprowadziłem w nim żadnych zmian, a git nie pozwoliłby mi go „ukryć” (ponieważ nie ma żadnych lokalnych zmian, prawda!). Więc przeniosłem.gitignore
plik poza repozytorium (jako rodzaj „kopii zapasowej”), a następnie zrobiłemgit reset --hard
, co „naprawiło” repozytorium w rozsądnym stanie.git status
pokazał mi, który plik został zmieniony i zasugerował, że mogę go użyćgit restore myFile
zamiast go usuwać, co zadziałało.Może to być również problem z uprawnieniami do plików. Git również je wersjonuje, chyba że config mówi inaczej. Po prostu dodaję tę odpowiedź dla osób, które mają prawie podobny problem, ale nie podobny.
źródło
Warte spróbowania:
Czy możesz ustawić, tylko dla tej aktualizacji, parametr config
core.trustctime
na false?źródło
Dodając moją odpowiedź, ponieważ nikt z innych o tym nie wspomina. W moim przypadku stało się to po dodaniu nowych plików do indeksu z
-N
flagą, a więc po prostu dodanie ich do indeksu bez dodawania ich zawartości. W tym stanie działaniegit stash
powoduje ten błąd.źródło
Miałem ten sam błąd po sytuacji, w której
git status
powiedziano,new file: foo.cpp
że plik nie został dodany do obszaru przemieszczania. tj. pod nagłówkiem „Zmiany nie zostały wprowadzone do zatwierdzenia”. Bardzo dziwne, to zwykle się nie zdarza.Rozwiązanie:,
git add foo.cpp
a następniegit stash
działało ponownie.źródło