Podczas próby pobrania katalogu projektu w terminalu pojawia się następujący błąd:
harsukh@harsukh-desktop:~/Sites/branch1$ git pull origin master
U app/config/app.php
U app/config/database.php
U app/routes.php
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
Dlaczego git mówi "Pull is not possible because you have unmerged files"
i jak mogę to rozwiązać?
git
git-pull
merge-conflict-resolution
git-fetch
Harsukh Makwana
źródło
źródło
Odpowiedzi:
Obecnie dzieje się tak, że masz pewien zestaw plików, które próbowałeś scalić wcześniej, ale powodowały one konflikty scalania. Idealnie, jeśli ktoś dostanie konflikt scalania, powinien rozwiązać go ręcznie i zatwierdzić zmiany za pomocą
git add file.name && git commit -m "removed merge conflicts"
. Teraz inny użytkownik zaktualizował pliki w swoim repozytorium i przekazał swoje zmiany do wspólnego repozytorium nadrzędnego.Zdarza się, że twoje konflikty scalania z (prawdopodobnie) ostatniego zatwierdzenia nie zostały rozwiązane, więc twoje pliki nie są scalone w porządku, a zatem flaga
U
(unmerged
) dla plików. Więc teraz, kiedy to zrobiszgit pull
, git wyrzuca błąd, ponieważ masz pewną wersję pliku, która nie została poprawnie rozwiązana.Aby rozwiązać ten problem, musisz rozwiązać sporne konflikty scalania oraz dodać i zatwierdzić zmiany, zanim będziesz mógł to zrobić
git pull
.Przykładowa reprodukcja i rozwiązanie problemu:
Najpierw stwórzmy strukturę repozytorium
Teraz jesteśmy w repo_clone, a jeśli to zrobisz
git pull
, spowoduje to konfliktyJeśli zignorujemy konflikty w klonie i dokonamy teraz większej liczby zatwierdzeń w oryginalnym repo,
A potem robimy
git pull
, rozumiemyZauważ, że
file
teraz jest w stanie nie połączonym, a jeśli to zrobimygit status
, możemy wyraźnie zobaczyć to samo:Aby rozwiązać ten problem, musimy najpierw rozwiązać konflikt scalania, który wcześniej zignorowaliśmy
i ustaw jego zawartość na
a następnie dodaj go i zatwierdź zmiany
źródło
Próbujesz dodać jeszcze jedno zatwierdzenie do lokalnego oddziału, podczas gdy katalog roboczy nie jest czysty. W rezultacie Git odmawia wykonania tej czynności. Rozważ następujące diagramy, aby lepiej zobrazować scenariusz:
Istnieją dwie opcje radzenia sobie z tą sytuacją. Możesz albo odrzucić zmiany w swoich plikach, albo je zachować.
Opcja pierwsza: Wyrzuć zmiany
Możesz użyć albo
git checkout
dla każdego nie połączonego pliku, albo możesz użyć,git reset --hard HEAD
aby zresetować wszystkie pliki w oddziale do HEAD. Nawiasem mówiąc, HEAD w twoim lokalnym oddziale to B, bez gwiazdki. Jeśli wybierzesz tę opcję, schemat stanie się:Teraz, gdy pociągniesz, możesz szybko przewinąć gałąź ze zmianami od mistrza. Po wyciągnięciu gałąź wyglądałaby jak master:
Opcja druga:
zachowaj zmiany Jeśli chcesz zachować zmiany, najpierw musisz rozwiązać wszelkie konflikty scalania w każdym z plików. Możesz otworzyć każdy plik w swoim IDE i poszukać następujących symboli:
Git przedstawia dwie wersje kodu. Kod zawarty w znacznikach HEAD to wersja z bieżącego oddziału lokalnego. Druga wersja pochodzi z pilota. Po wybraniu wersji kodu (i usunięciu drugiego kodu wraz ze znacznikami) możesz dodać każdy plik do obszaru testowego, pisząc
git add
. Ostatnim krokiem jest zatwierdzenie wyniku przez wpisaniegit commit -m
odpowiedniego komunikatu. W tym momencie nasz schemat wygląda następująco:Tutaj oznaczyłem zatwierdzenie, które właśnie wykonaliśmy, jako C ', ponieważ różni się od zatwierdzenia C na pilocie. Teraz, jeśli spróbujesz pociągnąć, pojawi się błąd szybkiego przewijania. Git nie może odtworzyć zmian w pilocie na gałęzi, ponieważ zarówno gałąź, jak i pilot odeszły od wspólnego zatwierdzenia B wspólnego przodka. W tym momencie, jeśli chcesz wyciągnąć, możesz wykonać inną
git merge
albogit rebase
gałąź na pilocie.Opanowanie Git wymaga umiejętności zrozumienia i manipulowania jednokierunkowymi połączonymi listami. Mam nadzieję, że to wyjaśnienie sprawi, że zaczniesz myśleć we właściwym kierunku o korzystaniu z Git.
źródło
Istnieje proste rozwiązanie tego problemu. Ale w tym celu musisz najpierw nauczyć się następujących
Aby usunąć konflikty, możesz użyć
Powyższe polecenie zasadniczo otwiera plik lokalny, plik mieszany, plik zdalny (łącznie 3 pliki) dla każdego pliku będącego w konflikcie. Pliki lokalne i zdalne są tylko w celach informacyjnych, a korzystając z nich możesz wybrać, co chcesz dołączyć (lub nie) do pliku mieszanego. Po prostu zapisz i zamknij plik.
źródło
Jeśli nie chcesz scalić zmian i nadal chcesz zaktualizować swój lokalny, uruchom:
Spowoduje to zresetowanie lokalnego za pomocą HEAD, a następnie pociągnięcie pilota za pomocą git pull.
Jeśli scalenie zostało już zatwierdzone lokalnie (ale nie zostało jeszcze przekazane zdalnie), a także chcesz je przywrócić:
źródło
Jeśli chcesz ściągnąć zdalną gałąź, aby działała lokalnie (powiedzmy do celów przeglądu lub testowania), a gdy
$ git pull
pojawią się lokalne konflikty scalania:źródło
Masz lokalnie niektóre pliki, które należy scalić, zanim będzie można je pobrać. Możesz pobrać pliki, a następnie pociągnąć, aby zastąpić pliki lokalne.
źródło
Kroki do naśladowania :
Dzięki, Sarbasish
źródło
Wystąpił ze mną ten sam problem.
W moim przypadku kroki są następujące:
Oto komunikat, który się pojawił -
i każdy ma 2 i 1 inny zatwierdzenie. Masz nieuziemione ścieżki.
(use "git pull" to merge the remote branch into yours)
(fix conflicts and run "git commit")
Nie scalone ścieżki:
(użyj „git add ...”, aby zaznaczyć rozdzielczość)
Która kolej może rozwiązać problem z tym obrazem -
źródło
W przypadku wystąpienia konfliktu scalania można otworzyć pojedynczy plik. Otrzymasz symbole „<<<<<<< lub >>>>>>>”. Odnoszą się one do twoich zmian i zmian obecnych na pilocie. Możesz ręcznie edytować wymaganą część. następnie zapisz plik, a następnie wykonaj: git add
Konflikty scalania zostaną rozwiązane.
źródło
Po prostu uruchom to polecenie:
źródło