Dlaczego git mówi: "Ściąganie nie jest możliwe, ponieważ masz niezapisane pliki"?
Kiedy próbuję pobrać katalog projektu w terminalu, widzę 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ć?
9 answers
Obecnie dzieje się tak, że masz pewien zestaw plików, które próbowałeś połączyć wcześniej, ale wywołały konflikty scalania.
Najlepiej, jeśli dojdzie do konfliktu scalania, powinien on rozwiązać je ręcznie i zatwierdzić zmiany za pomocą git add file.name && git commit -m "removed merge conflicts"
.
Teraz inny użytkownik zaktualizował dane pliki w swoim repozytorium i wprowadził zmiany do wspólnego repo.
Tak się składa, że Twoje konflikty scalające z (prawdopodobnie) ostatniego commita nie zostały rozwiązane, więc Twoje pliki nie są scalane w porządku, a zatem U
(unmerged
) Flaga dla plików.
Więc teraz, kiedy robisz git pull
, git wyrzuca błąd, ponieważ masz jakąś wersję pliku, która nie jest poprawnie rozwiązana.
Aby rozwiązać ten problem, musisz rozwiązać konflikty scalania, o których mowa, oraz dodać I zatwierdzić zmiany, zanim będziesz mógł wykonać git pull
.
Przykładowe odtworzenie i rozwiązanie problemu:
# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test
Najpierw stwórzmy repozytorium struktura
test $ mkdir repo && cd repo && git init && touch file && git add file && git commit -m "msg"
repo $ cd .. && git clone repo repo_clone && cd repo_clone
repo_clone $ echo "text2" >> file && git add file && git commit -m "msg" && cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
Teraz jesteśmy w repo_clone, a jeśli zrobisz git pull
, będzie to wywoływać konflikty
repo_clone $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/anshulgoyal/Desktop/test/test/repo
* branch master -> FETCH_HEAD
24d5b2e..1a1aa70 master -> origin/master
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
Jeśli zignorujemy konflikty w klonie i zrobimy więcej commitów w oryginalnym repo,]}
repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
A potem robimy git pull
, otrzymujemy
repo_clone $ git pull
U file
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'.
Zauważ, że file
jest teraz w stanie niezaangażowanym i jeśli zrobimy git status
, możemy wyraźnie zobaczyć to samo:
repo_clone $ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file
Więc, aby rozwiązać ten problem, musimy najpierw rozwiązać konflikt scalania, który zignorowaliśmy wcześniej
repo_clone $ vi file
I ustaw jego zawartość na
text2
text1
text1
A następnie dodać go i zatwierdzić zmiany
repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-29 03:07:36
Próbujesz dodać jeszcze jeden nowy commit do lokalnej gałęzi, podczas gdy twój katalog roboczy nie jest czysty. W rezultacie, Git odmawia wykonania pull. Rozważ poniższe diagramy, aby lepiej zobrazować scenariusz:
Istnieją dwie możliwości rozwiązania tej sytuacji. Możesz albo odrzuć zmiany w plikach, albo zachowaj je.Zdalne: A
local: A
(*oznacza, że masz kilka plików, które zostały zmodyfikowane, ale nie zostały zatwierdzone.)
Opcja pierwsza: wyrzuć zmiany
Możesz użyć git checkout
dla każdego niezmergowanego pliku, lub możesz użyć git reset --hard HEAD
aby zresetować wszystkie pliki w gałęzi do HEAD. Nawiasem mówiąc, głowa w lokalnym oddziale jest B, bez gwiazdki. Jeśli wybierzesz tę opcję, schemat stanie się:
Zdalne: A
local: A
Teraz, gdy pociągniesz, możesz przewijać do przodu twoja gałąź ze zmianami od mistrza. Po wyciągnięciu gałąź wyglądałaby jak master:
Local: A
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 IDE i szukać następujących symboli:
// Twoja wersja kodu
=======
// the zdalna wersja kodu
>>>>>>>
Git prezentuje dwie wersje kodu. Kod zawarty w znacznikach HEAD jest wersją z Twojej bieżącej lokalnej gałęzi. Druga wersja jest tym, co pochodzi z pilota. Po wybraniu wersji kodu (i usunięciu drugiego kodu wraz ze znacznikami), możesz dodać każdy plik do swojego miejsca postoju, wpisując git add
. Ostatnim krokiem jest zatwierdzenie wyniku przez wpisanie git commit -m
z odpowiednim wiadomość. W tym momencie nasz diagram wygląda tak:
Zdalne: A
local: A
Tutaj oznaczyłem commit, który właśnie zrobiliśmy jako C', ponieważ różni się on od commita C na pilocie. Teraz, jeśli spróbujesz pociągnąć, otrzymasz błąd nie przewijania do przodu. Git nie może odtworzyć zmian w zdalnym w Twojej gałęzi, ponieważ zarówno twoja gałąź, jak i zdalny odbiegają od wspólnego commita przodka B. W tym momencie, jeśli chcesz pociągnąć, możesz wykonać inną git merge
, lub git rebase
swoją gałąź na pilocie.
Opanowanie Gita wymaga zrozumienia i manipulacji jednokierunkowymi listami. Mam nadzieję, że to Wyjaśnienie sprawi, że pomyślisz we właściwym kierunku o używaniu Gita.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-01 11:36:49
Jest na to proste rozwiązanie. Ale w tym celu musisz najpierw nauczyć się następujących
vimdiff
Aby usunąć conficts, możesz użyć
git mergetool
Powyższe polecenie otwiera plik lokalny, plik mieszany, plik zdalny (w sumie 3 pliki) dla każdego skonfliktowanego pliku. Pliki lokalne i zdalne są tylko w celach informacyjnych, a za ich pomocą możesz wybrać, co ma zawierać (lub nie) w mieszanym pliku. I po prostu zapisz i zamknij plik.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-03 19:04:08
Masz kilka plików lokalnie, które muszą zostać połączone, zanim będziesz mógł je wyciągnąć. Możesz pobrać pliki, a następnie przeciągnąć, aby zastąpić pliki lokalne.
git checkout app/config/app.php app/config/database.php app/routes.php
git pull origin master
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-29 13:08:12
Jeśli chcesz ściągnąć zdalną gałąź, aby działać lokalnie (np. w celach przeglądania lub testowania), a kiedy $ git pull
pojawią się lokalne konflikty merge:
$ git checkout REMOTE-BRANCH
$ git pull (you get local merge conflicts)
$ git reset --hard HEAD (discards local conflicts, and resets to remote branch HEAD)
$ git pull (now get remote branch updates without local conflicts)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-03 16:25:44
Jeśli nie chcesz scalić zmian i nadal chcesz zaktualizować swój lokalny, przejdź do polecenia.
git reset HEAD —hard
Spowoduje to zresetowanie twojego lokalnego za pomocą HEAD, a następnie pociągnięcie Twojego pilota za pomocą git pull!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-11 12:51:06
W przypadku wystąpienia konfliktu scalania można otworzyć pojedynczy plik. Dostaniesz " > > > > > " symbole. Odnoszą się one do Twoich zmian i zmian obecnych na zdalnym. Można ręcznie edytować wymaganą część. następnie zapisz plik, a następnie wykonaj : git add
Konflikty scalania zostaną rozwiązane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 09:44:58
Był ten sam problem ze mną
W moim przypadku kroki są jak poniżej -
- usunięto wszystkie pliki, które zaczynały się od U (unmerged) symbol. as -
U project/app/pages/file1/file.ts
U project/www/assets/file1/file-name.html
- ściągnij kod z master
$ git pull origin master
- sprawdzone dla statusu
$ git status
Oto wiadomość, która się pojawiła -
i mają odpowiednio 2 i 1 Inny commit.(use "git pull" to merge the remote branch into yours)
Masz unmerged / align = "left" / (fix conflicts and run "git commit")
Unmerged paths:
(użyj " git add ..."aby zaznaczyć rozdzielczość)
both modified: project/app/pages/file1/file.ts
both modified: project/www/assets/file1/file-name.html
- Dodano wszystkie nowe zmiany -
$ git add project/app/pages/file1/file.ts
project/www/assets/file1/file-name.html
- Commit changes on head-
$ git commit -am "resolved conflict of the app."
- popchnął kod-
$ git push origin master
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-10 07:30:13
Po prostu uruchom to polecenie:
git reset --hard
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-14 14:11:00