Właśnie połączyłem gałąź z moim masterem w git i otrzymałem. Automatic merge failed; fix conflicts and then commit the result.
Teraz uruchomiłem git mergetool
i vimdiff otworzył się z poniższym obrazkiem. Nie wiem, jak używać vimdiff. Co oznacza każdy panel w tym miejscu i jak powinienem rozwiązać konflikt scalania?
159
Odpowiedzi:
Wszystkie cztery bufory zapewniają inny widok tego samego pliku. Bufor po lewej stronie u góry (LOCAL) to wygląd pliku w gałęzi docelowej (w którą scalasz). Bufor w prawym górnym rogu (REMOTE) to wygląd pliku w gałęzi źródłowej (skąd scalasz). Bufor środkowy (BASE) jest wspólnym przodkiem obu (dzięki czemu można porównać, w jaki sposób wersje lewa i prawa różnią się od siebie).
Mogę się mylić w następującym punkcie. Myślę, że źródłem konfliktu podczas łączenia jest to, że oba pliki zmieniły tę samą część pliku od czasu BASE; LOCAL zmienił cudzysłowy z podwójnych na pojedyncze, a REMOTE dokonał tej samej zmiany, ale także zmienił wartość tła z koloru na adres URL. (Myślę, że scalanie nie jest wystarczająco inteligentne, aby zauważyć, że wszystkie zmiany LOCAL są również obecne w REMOTE; po prostu wie, że LOCAL wprowadził zmiany od czasu BASE w tych samych miejscach, co REMOTE).
W każdym razie dolny bufor zawiera plik, który możesz edytować - ten, który znajduje się w katalogu roboczym. Możesz wprowadzić dowolne zmiany;
vim
pokazuje, czym różni się on od każdego z górnych widoków, czyli obszarów, których automatyczne scalanie nie mogło sobie poradzić. Pobierz zmiany z LOCAL, jeśli nie chcesz, aby zmiany REMOTE. Pobierz zmiany z REMOTE, jeśli wolisz je od zmian LOKALNYCH. Wyciągnij z BASE, jeśli uważasz, że zarówno ZDALNE, jak i LOKALNE są błędne. Zrób coś zupełnie innego, jeśli masz lepszy pomysł! Ostatecznie zmiany, które tu wprowadzisz, są faktycznie wprowadzane.źródło
:x
lub:w
(:x
też wychodzi) plus „powrót”.vim
.Odpowiedź @ chepner jest świetna, chciałbym dodać kilka szczegółów na temat części pytania „jak mam postępować, aby naprawić konflikt scalania”. Jeśli przyjrzysz się, jak właściwie używać vimdiff w tym przypadku, znajdziesz to poniżej.
Po pierwsze, aby zająć się opcją "przerwij wszystko" - jeśli nie chcesz używać "vimdiff" i chcesz przerwać scalanie: naciśnij Esc, a następnie wpisz
:qa!
i naciśnij Enter. (zobacz też Jak wyjść z edytora Vima? ). Git zapyta, czy scalanie zostało zakończone, odpowiedzn
.Jeśli chcesz używać vimdiff, oto kilka przydatnych skrótów. Zakłada się, że znasz podstawy Vima (nawigacja i tryb wstawiania / normalny):
:diffget LO
:diffget RE
:diffget BA
:wqa
:cquit
zamiast tego: Jak anulować zewnętrzne różnice git?Wydaje się, że nie można dodać lokalnych i zdalnych fragmentów konfliktów bez wklejania kopii lub niestandardowych skrótów: /vi/10534/is-there-a-way-to-take-both- when-using-vim-as-merge-tool, a szkoda, ponieważ add add jest tak powszechnym typem konfliktu.
Aby vimdiff nie prosił Cię o naciśnięcie klawisza Enter przy każdym uruchomieniu, dodaj do
.vimrc
:jak wspomniano na: /vi/771/how-can-i-suppress-the-press-enter-prompt-when-opening-files-in-diff-mode
Możesz przeszukać Internet pod kątem innych skrótów vimdiff. Uważam, że ten jest przydatny: https://gist.github.com/hyamamoto/7783966
źródło
:diffget
.Najlepsze narzędzie do łączenia, które zastępuje vimdiff
To trochę żartobliwy żart, ale właśnie do tego doszedłem jako vimmer po wypróbowaniu vimdiff.
Aby rozwiązać konflikt scalania, prawie zawsze potrzebuję zobaczyć:
a następnie spróbować połączyć je razem.
Podczas gdy vimdiff pokazuje BASE, LOCAL i REMOTE na ekranie:
Nie wiem, jak sprawić, by wyraźnie pokazywał te dwa różnice, których potrzebuję poza tym, patrząc kilka razy w prawo, lewo, prawo, lewo.
Co więcej, LOKALNE i ZDALNE są już widoczne w znacznikach konfliktów git merge, więc nie zyskuję zbyt wiele na narzędziu, które je ponownie pokazuje.
Dlatego zamiast tego stworzyłem własne małe "difftool", które faktycznie pokazuje różnice, których mi brakowało:
~ / bin / cirosantilli-connectetool
GitHub upstream .
I zainstaluj go za pomocą:
Teraz, kiedy to zrobisz:
pokazuje dwa różnice, które chcę na terminalu, np. coś razem:
Możesz więc zobaczyć tutaj dwa różnice wrzucone do terminala:
RealView_BASE_15560.py
vsRealView_LOCAL_15560.py
RealView_BASE_15560.py
vsRealView_REMOTE_15560.py
Jeśli różnice są duże, po prostu wyszukam moje supermoce tmux .
Tak, tracisz pewne skróty, które zapewnia vimdiff, ale ogólnie rozwiązywanie konfliktów wymaga starannego kopiowania wklejania z obu wersji, co mogę zrobić dobrze w normalnej sesji vim z markerami konfliktów git.
Obserwowanie i porównywanie plików podczas
vimdiff
działaniaZanim usiadłem i zautomatyzowałem moją idealną konfigurację
cirosantilli-mergetool
, właśnie to robiłem, aby uzyskać dwa różnice, których potrzebowałem.Podczas
git mergetool
działaniavimdiff
, jeśli wystąpi konflikt w pliku o nazwie, powiedzmymain.py
, git generuje pliki dla każdej z wersji, nazwane jako:w tym samym katalogu, w
main.py
którym1367
znajduje się identyfikator PID git connectetool, a zatem „losowa” liczba całkowita, jak wspomniano w: W przypadku konfliktu git merge, jakie są generowane pliki BACKUP, BASE, LOCAL i REMOTE?Aby zobaczyć różnice, które chcę, najpierw znajduję wygenerowane pliki
git status
, a następnie otwieram nowe terminale i robię vimdiff między parami plików, na których mi zależy:Razem z
git mergetool
tymi informacjami pomaga WIELU szybko dowiedzieć się, co się dzieje!Ponadto, nawet gdy uruchomiony jest program Mergetool, możesz po prostu otworzyć plik:
bezpośrednio i edytuj go tam, jeśli uważasz, że będzie to łatwiejsze z większym oknem edytora.
Przejdź bezpośrednio, aby scalić konflikty
Podczas
]c
przeskakiwania do następnego punktu diff wewnątrz vimdiff, nie zawsze występuje tam konflikt scalania.Aby w tym pomóc, mam w swoim
~/.vimrc
:która bezpośrednio wyszukuje konflikty.
git imerge
Może najlepszą opcją jest po prostu zrezygnowanie z używania vimdiff i poleganie na zwykłym vim + git imerge, o którym wspomniano w: Jak mogę się dowiedzieć, które zmiany Git powodują konflikty? ponieważ krzywa uczenia się vimdiff jest denerwująca i nie wykonuje funkcji, których potrzebujemy najbardziej.
źródło