Jak użyć vimdiff do rozwiązania konfliktu?

Właśnie połączyłem gałąź z moim master w git i dostałem {[0] } teraz uruchomiłem git mergetool i vimdiff otworzył się obrazkiem poniżej. Nie wiem jak używać vimdiffa. Co oznacza każdy panel tutaj i jak należy postępować, aby rozwiązać konflikt scalania?

Tutaj wpisz opis obrazka

Author: hichris123, 2013-02-16

2 answers

Wszystkie cztery bufory zapewniają inny widok tego samego pliku. Lewy górny bufor (lokalny) to sposób, w jaki plik wyglądał w docelowej gałęzi (w co scalasz). Prawy górny bufor (zdalny) pokazuje, jak plik wyglądał w Twojej gałęzi źródłowej(skąd łączysz). Środkowy bufor (baza) jest wspólnym przodkiem tych dwóch (można więc porównać, w jaki sposób lewa i prawa Wersja się od siebie różniły).

Mogę się mylić w następującym punkcie. Myślę, że źródłem konflikt scalania polega na tym, że oba pliki zmieniły tę samą część pliku od bazy; LOCAL zmienił cudzysłów z podwójnego na pojedynczy, a REMOTE dokonał tej samej zmiany, ale także zmienił wartość tła z koloru na adres URL. (Myślę, że połączenie nie jest wystarczająco inteligentne, aby zauważyć, że wszystkie zmiany w LOCAL są również obecne w REMOTE; po prostu wie, że LOCAL dokonał zmian od BASE w tych samych miejscach, co REMOTE).

W każdym przypadku dolny bufor zawiera plik, który może faktycznie edytować-ten, który znajduje się w katalogu roboczym. Możesz wprowadzać dowolne zmiany; vim pokazuje, jak różni się od każdego z górnych widoków, które są obszarami, których automatyczne scalanie nie mogło nie obsłużyć. Przeciągnij zmiany z lokalnego, jeśli nie chcesz, aby zmiany zdalne. Jeśli wolisz zmiany zdalne niż lokalne, pobieraj je ze zdalnego sterowania. Wyciągnij z bazy, jeśli uważasz, że zarówno zdalne, jak i lokalne są złe. Zrób coś zupełnie innego, jeśli masz lepszy pomysł! W końcu, zmiany, które tu wprowadzasz, są tymi, które rzeczywiście zostaną popełnione.

 109
Author: chepner,
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
2013-11-05 10:06:21

@ chepner odpowiedź jest świetna, chciałbym dodać kilka szczegółów na temat" jak należy postępować, aby naprawić konflikt merge " część pytania. Jeśli przyjrzysz się, jak naprawdę używać vimdiff w tym przypadku, to jest to poniżej.


Po pierwsze, aby rozwiązać opcję "abort everything" - jeśli nie chcesz używać "vimdiff" i chcesz przerwać scalanie: Naciśnij Esc , następnie wpisz :qa! i naciśnij Enter . (Zobacz także Jak zamknąć edytor Vim?). Git zapyta cię, czy merge był kompletny, odpowiedz n.


Jeśli chcesz używać vimdiff, oto kilka przydatnych skrótów. Zakłada się, że znasz podstawy Vima (nawigacja i tryb insert/normal):

  • przejdź do dolnego bufora (wynik scalenia): Ctrl-W j
  • przejdź do następnego Diffa za pomocą j/k ; lub, lepiej, Użyj ] c oraz [ c aby przejść odpowiednio do następnego i poprzedniego rozróżnienia
  • użycie z o podczas gdy na fałdzie, aby go otworzyć, jeśli chcesz zobaczyć więcej kontekstu
  • dla każdego Diffa, zgodnie z odpowiedzią @chepnera, możesz albo pobrać wersję kodu z lokalnej, zdalnej lub podstawowej wersji, albo edytować ją i ponowić według własnego uznania
    • Aby pobrać go z lokalnej wersji, użyj :diffget LO
    • from remote: :diffget RE
    • Z Bazy: :diffget BA
    • lub, jeśli chcesz edytować siebie, najpierw pobierz wersję z lokalnego / zdalnego / bazy, a następnie przejdź do trybu wstawiania i edytuj rest
  • po zakończeniu zapisz wynik scalania i zamknij wszystkie okna :wqa
  • normalnie, git wykrywa, że merge zostało wykonane i kończy commit merge

Możesz wyszukiwać w Internecie inne skróty vimdiff. Znalazłem ten przydatny na przykład: https://gist.github.com/hyamamoto/7783966

 22
Author: Timur,
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-07-25 16:52:05