Jak zignorować następujący komunikat o błędzie podczas pobierania Git?
Lokalne zmiany w poniższych plikach zostaną zastąpione przez scalenie
Co jeśli chcę je zastąpić?
Próbowałem takich rzeczy git pull -f
, ale nic nie działa.
Dla jasności chcę tylko zastąpić określone zmiany, a nie wszystko.
git config core.fileMode false
oszczędzam swoje czasyOdpowiedzi:
Jeśli chcesz usunąć wszystkie lokalne zmiany - w tym pliki, które nie są śledzone przez git - z kopii roboczej, po prostu ukryj je:
Jeśli już ich nie potrzebujesz, możesz upuścić tę skrytkę:
Jeśli nie chcesz ukrywać zmian, które już wprowadziłeś - np. Za pomocą
git add
- dodaj opcję--keep-index
. Należy jednak pamiętać, że nadal będzie to zapobiegać scalaniu, jeśli te zmiany etapowe kolidują z tymi z góry.Jeśli chcesz zastąpić tylko określone części lokalnych zmian, istnieją dwie możliwości:
Zaakceptuj wszystko, czego nie chcesz zastąpić, i użyj powyższej metody do końca.
Użyj
git checkout path/to/file/to/revert
dla zmian, które chcesz zastąpić. Upewnij się, że plik nie jest przenoszony przezgit reset HEAD path/to/file/to/revert
.źródło
git checkout HEAD^ path/to/file/to/revert
. Korzystanie z HEAD ^ robiło różnicę.save --keep-index
”.W porządku, z pomocą dwóch pozostałych odpowiedzi, wpadłem na bezpośrednie rozwiązanie:
źródło
Działa to w celu zastąpienia wszystkich lokalnych zmian i nie wymaga tożsamości:
źródło
Oto rozwiązanie, które odrzuca zmiany etapowe:
źródło
Możesz zatwierdzić zmiany przed scaleniem lub ukryć je:
git stash save
git merge origin/master
git stash pop
źródło
--autostash
opcja jest dostępna tylko z--rebase
opcją (Jeśli chcesz odrzucić zmiany lokalne w jednym pliku, możesz wykonać następujące czynności:
Następnie możesz zastąpić plik [s] najnowszą wersją, wykonując:
źródło
git reset HEAD~
a następnie zrobićgit checkout
git checkout -- <file>
kończy się niepowodzeniemerror: pathspec '<file>' did not match any file(s) known to git.
Jeśli Twoje repozytorium zawiera kilka plików, które zostały usunięte z
master
:git checkout master
git fetch origin
git reset --hard origin/master
git checkout -b newbranch
źródło
Czasami żadna z nich nie działa. Irytujące jest to, że ze względu na LF myślę, że zadziała usuwanie plików, a następnie ciągnięcie. Nie polecam tego rozwiązania, ale jeśli plik nie istnieje, git nie bezużytecznie poinformuje cię, że twoje zmiany (które mogą nawet nie być zmianami) zostaną zastąpione i pozwolą ci kontynuować.
Używaj na własne ryzyko.
źródło
git stash save --keep-index
nie działało dla mnie.poniższe polecenie działało zgodnie z oczekiwaniami.
Zastępuje wszystkie lokalne zmiany, jeśli ich nie potrzebujesz.
źródło
Tyle odpowiedzi tutaj, że nienawidzę dodawać jeszcze jednej, ale wszystkie powyższe są bardziej nieprzyjemne niż powinny. Muszę to robić cały czas, ponieważ Git wydaje się być zdezorientowany i mówi, że zmodyfikowałem pliki, które się nie zmieniły (nie można przywrócić, ponieważ się nie zmieniły, ale nie mogę wyciągnąć, ponieważ podobno się zmieniły) Najprostsze i najszybszy jak dotąd znalazłem to:
źródło
W ostatnim Git, można dodać
-r
/--rebase
napull
polecenia rebase aktualną gałąź na wierzchu górnej gałęzi po pobraniu. Ostrzeżenie powinno zniknąć, ale istnieje ryzyko konfliktów, które należy rozwiązać.Alternatywnie możesz wymusić różne oddziały siłą, a następnie wrócić do nich
master
ponownie, np .:Następnie wyciągnij go jak zwykle:
Zastosowanie tej metody pozwala zaoszczędzić czas od ukrywania (
git stash
) i potencjalnych problemów z uprawnieniami, resetowania plików (git reset HEAD --hard
), usuwania plików (git clean -fd
) itp. Również powyższe jest łatwiejsze do zapamiętania.źródło
Ten problem jest spowodowany tym, że dokonałeś zmian lokalnie w pliku / plikach i ten sam plik / pliki istnieje wraz ze zmianami w repozytorium Git, więc przed ściągnięciem / wypchnięciem będziesz potrzebował ukryć lokalne zmiany:
Aby zastąpić lokalne zmiany jednego pliku:
Aby zastąpić wszystkie zmiany lokalne (zmiany we wszystkich plikach):
Problem może również wynikać z tego, że jesteś w gałęzi, która nie jest połączona z gałęzią główną.
źródło
git reset --hard && git clean -df
Uwaga : Spowoduje to zresetowanie i usunięcie wszystkich nieśledzonych plików.
źródło
Możesz użyć tego do zastąpienia pliku
źródło
Najlepszym sposobem rozwiązania tego problemu jest:
Następnie możesz zastąpić plik:
źródło
git checkout -- path/*
tylko raz, co pozwoliło mi na wykonanie ściągnięcia później.Pomogło mi to odrzucić zmiany na zdalnym serwerze na żywo i pobrać z GitHub kontroli źródła:
źródło
Oto moja strategia rozwiązania problemu.
Opis problemu
Musimy wprowadzić zmiany w ponad 10 plikach. Próbowaliśmy
PULL (git pull origin master)
, ale Git krzyknął:Próbowaliśmy
commit
wtedy wykonaćpull
, ale one również nie działały.Rozwiązanie
Właściwie byliśmy w brudnej fazie, ponieważ pliki znajdowały się w „Strefie przejściowej”, zwanej też „Strefą indeksów”, a niektóre znajdowały się w „Głównej strefie”, czyli „lokalnym katalogu Git”. I chcieliśmy pobrać zmiany z serwera.
Sprawdź ten link, aby uzyskać informacje na temat różnych etapów Git w przejrzysty sposób: Etapy GIT
Wykonaliśmy następujące kroki
git stash
(dzięki temu nasz katalog roboczy był czysty. Twoje zmiany są przechowywane na stosie przez Git).git pull origin master
(Wyciągnij zmiany z serwera)git stash apply
(Zastosował wszystkie zmiany ze stosu)git commit -m 'message'
(Zatwierdził zmiany)git push origin master
(Przekazał zmiany na serwer)git stash drop
(Upuść stos)Rozumiemy, kiedy i dlaczego potrzebujesz ukrywania
Jeśli jesteś w stanie brudnym , oznacza to, że dokonujesz zmian w swoich plikach, a następnie z jakiegoś powodu jesteś zmuszony pociągnąć lub przejść do innego oddziału w celu wykonania bardzo pilnej pracy, więc w tym momencie nie możesz wyciągnąć lub przełączaj, dopóki nie zatwierdzisz zmiany.
stash
Polecenia jest tutaj jako pomocnej dłoni.Z książki ProGIT , wydanie drugie:
źródło
Jeśli chcesz zastąpić określone zmiany, musisz powiedzieć, które z nich chcesz zapomnieć.
Możesz spróbować selektywnie ukryć zmiany, których chcesz porzucić,
git stash --patch
a następnie upuścić tę skrytkęgit stash drop
. Następnie możesz pobrać zmiany zdalne i scalić je jak zwykle.źródło
TL; DR;
Nie wiem, dlaczego nie ma jeszcze odpowiedzi, ale rozwiązanie, jak widać, jest proste. Wszystkie odpowiedzi tutaj sugerują to samo: aby usunąć / zapisać zmiany lokalne i zastosować wcześniej, a następnie (jeśli tak
save
) zastosuj zmiany lokalne na górze.Co
git pull --rebase --autostash
robi krok po kroku:Moja sprawa (prawdopodobnie twoja):
Mam zmiany lokalne (zmiany w katalogu roboczym):
Gdy próbuję pobrać zmiany zdalne, pojawia się błąd:
Te zmiany nie łączą się ze zmianami lokalnymi:
Kiedy więc
pull --rebase --autostash
lokalne zmiany zostały zapisane i zastosowane automatycznie bez żadnego problemuTeraz moje lokalne zmiany są trochę niższe:
źródło
Miałem taki przypadek szczególny: miałem plik z --assume-niezmieniony. Trudno było go zlokalizować, ponieważ
git status
polecenie nie wyświetlało żadnych zmianźródło
Jeśli chcesz zachować zmiany produkcyjne na serwerze, po prostu połącz się w nowy element konfiguracji. Metoda przetwarzania jest następująca:
Może nie wykonujesz wszystkich operacji. Możesz wiedzieć, co możesz zrobić dalej.
źródło
Ignorowałem plik w moim repozytorium, a kiedy to zrobiłem
git pull upstream master
, otrzymałem następujący błąd:Aby to rozwiązać, wykonałem następujące czynności
Zrobiłem to
git status
i dostałem tę wiadomośćWtedy nie
git checkout myfile.js
następujegit pull upstream master
. Tym razem operacja ściągnięcia git zakończyła się powodzeniem.źródło
Zetknąłem się z tym, wyciągając z mistrza.
Sposób, w jaki sobie z tym poradziłem, używając Visual Studio;
Mam nadzieję że to pomoże!
źródło
Najprostszym rozwiązaniem jest:
źródło
Jestem nowy w Git i nie jestem pewien, czy moje rozwiązanie jest dobrym pomysłem.
Przetestowałem WSZYSTKIE odpowiedzi i żadna z nich nie działała dla mnie!
Ale znalazłem inne rozwiązanie:
Mam nadzieję że to pomoże.
źródło
Wystąpił błąd „Lokalne zmiany w następujących plikach zostałyby zastąpione przez scalanie”, ponieważ masz pewne zmiany w lokalnym repozytorium, które NIE zostały jeszcze zatwierdzone, więc przed wyciągnięciem ze zdalnego repozytorium po prostu zatwierdź zmiany w lokalnym repozytorium.
Powiedzmy, że twoje zdalne repozytorium ma jakąś gałąź xyz i chcesz, aby gałąź zdalnej repozytorium xyz została następnie scalona w (skopiowaną do) lokalną gałąź repozytorium xyz,
źródło
Jeśli ten błąd jest spowodowany zakończeniami linii,
będzie działać. Nie jestem do końca pewien, dlaczego to działa.
źródło
W przypadku Pycharm możesz zrobić Git -> Przywróć, a następnie pociągnąć.
źródło
Ten komunikat może się również zdarzyć, jeśli
git-lfs
zostanie użyty, a wskaźnik pliku zostanie zastąpiony przez prawdziwy plik.wtedy używasz:
pełne wyjście z mojej skrzynki
patrz https://github.com/git-lfs/git-lfs/issues/2839
źródło
Próbowałem i to z powodzeniem, przed wyciągnięciem, pozwól zatwierdzić cały plik, który nie został zatwierdzony, wtedy nie otrzymasz tych wiadomości od AS.
źródło