Więcej
Jak rozwiązywać konflikty scalania w Git
Jak rozwiązywać konflikty scalania w Git?
4577
3
Jak rozwiązywać konflikty scalania w Git?
Spróbuj:
git mergetool
.Otwiera GUI, które prowadzi cię przez każdy konflikt, a ty możesz wybrać jak go scalić. Czasami wymaga to trochę ręcznej edycji, ale zazwyczaj jest to wystarczające samo w sobie. Jest to o wiele lepsze niż robienie wszystkiego ręcznie.
Jak na komentarz @JoshGlover:
Polecenie nie'koniecznie otwiera GUI, chyba że je zainstalujesz. Uruchomienie
git mergetool
dla mnie spowodowało użycievimdiff
. Możesz zainstalować jedno z następujących narzędzi, aby użyć go zamiast tego:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.Poniżej znajduje się przykładowa procedura użycia
vimdiff
do rozwiązywania konfliktów scalania. W oparciu o ten linkKrok 1: Uruchom następujące komendy w swoim terminalu
To ustawi vimdiff jako domyślne narzędzie do scalania.
Krok 2: Uruchom następującą komendę w terminalu
Krok 3: Wyświetli się vimdiff w następującym formacie
Te 4 widoki to
Możesz poruszać się pomiędzy tymi widokami używając ctrl+w. Do widoku MERGED możesz przejść bezpośrednio używając ctrl+w a następnie j.
Więcej informacji o nawigacji vimdiff tutaj i tutaj.
Krok 4. Możesz edytować widok MERGED w następujący sposób
Jeśli chcesz pobrać zmiany z REMOTE
Jeśli chcesz otrzymać zmiany z BASE
Jeśli chcesz pobrać zmiany z LOCAL
Krok 5. Zapisz, Zakończ, Zatwierdź i Wyczyść
:wqa
zapisz i wyjdź z vigit commit -m "message"
git clean
Usuń dodatkowe pliki (np. *.orig) utworzone przez narzędzie diff.Zidentyfikuj, które pliki są w konflikcie (Git powinien Ci to powiedzieć).
Otwórz każdy plik i zbadaj dyferencje; Git je rozgranicza. Mam nadzieję, że będzie oczywiste, którą wersję każdego bloku zachować. Być może będziesz musiał przedyskutować to z innymi programistami, którzy popełnili kod.
Po rozwiązaniu konfliktu w pliku
git add the_file
.Gdy już rozwiążesz wszystkie konflikty, wykonaj
git rebase --continue
lub jakąkolwiek inną komendę Git powiedział, aby zrobić, gdy skończyłeś.Jeśli często wykonujesz małe commity, zacznij od spojrzenia na komentarze commitów za pomocą
git log --merge
. Następniegit diff
pokaże ci konflikty.Dla konfliktów, które obejmują więcej niż kilka linii, łatwiej jest zobaczyć, co się dzieje w zewnętrznym narzędziu GUI. Lubię opendiff - Git obsługuje także vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge po wyjęciu z pudełka i można zainstalować inne:
git config merge.tool "your.tool"
ustawi wybrane przez nas narzędzie, a następniegit mergetool
po nieudanym scaleniu pokaże nam różnice w kontekście.Za każdym razem, gdy edytujesz plik, aby rozwiązać konflikt,
git add filename
zaktualizuje indeks i twój diff nie będzie go już pokazywał. Kiedy wszystkie konflikty zostaną rozwiązane, a ich pliki zostanągit add
,git commit
zakończy scalanie.