de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 Spoike
Spoike
Question

Jak rozwiązywać konflikty scalania w Git

Jak rozwiązywać konflikty scalania w Git?

4577 2008-10-02T11:31:05+00:00 3
 TylerH
TylerH
Edytowane pytanie 15. maja 2019 в 9:21
Programowanie
git
git-merge
merge-conflict-resolution
git-merge-conflict
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Solution / Answer
Peter Burns
Peter Burns
2. października 2008 в 5:50
2008-10-02T17:50:25+00:00
Więcej
Źródło
Edytuj
#8531973

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życie vimdiff. 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 link

Krok 1: Uruchom następujące komendy w swoim terminalu

git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false

To ustawi vimdiff jako domyślne narzędzie do scalania.

Krok 2: Uruchom następującą komendę w terminalu

git mergetool

Krok 3: Wyświetli się vimdiff w następującym formacie

  ╔═══════╦══════╦════════╗
  ║       ║      ║        ║
  ║ LOCAL ║ BASE ║ REMOTE ║
  ║       ║      ║        ║
  ╠═══════╩══════╩════════╣
  ║                       ║
  ║        MERGED         ║
  ║                       ║
  ╚═══════════════════════╝

Te 4 widoki to

LOCAL - jest to plik z bieżącej gałęzi

BASE - wspólny przodek, jak wyglądał plik przed obiema zmianami

REMOTE - plik, który scalasz do swojej gałęzi

MERGED - wynik scalania, to jest to co zostanie zapisane w repo

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

:diffg RE  

Jeśli chcesz otrzymać zmiany z BASE

:diffg BA  

Jeśli chcesz pobrać zmiany z LOCAL

:diffg LO 

Krok 5. Zapisz, Zakończ, Zatwierdź i Wyczyść

:wqa zapisz i wyjdź z vi

git commit -m "message"

git clean Usuń dodatkowe pliki (np. *.orig) utworzone przez narzędzie diff.

 Fozoro
Fozoro
Edytowana odpowiedź 23. czerwca 2019 в 3:50
2763
0
 davetron5000
davetron5000
2. października 2008 в 12:41
2008-10-02T12:41:36+00:00
Więcej
Źródło
Edytuj
#8531971
  1. Zidentyfikuj, które pliki są w konflikcie (Git powinien Ci to powiedzieć).

  2. 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.

  3. Po rozwiązaniu konfliktu w pliku git add the_file.

  4. Gdy już rozwiążesz wszystkie konflikty, wykonaj git rebase --continue lub jakąkolwiek inną komendę Git powiedział, aby zrobić, gdy skończyłeś.

337
0
 Paul
Paul
2. października 2008 в 4:11
2008-10-02T16:11:18+00:00
Więcej
Źródło
Edytuj
#8531972

Jeśli często wykonujesz małe commity, zacznij od spojrzenia na komentarze commitów za pomocą git log --merge. Następnie git 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ępnie git 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.

Peter Mortensen
Peter Mortensen
Edytowana odpowiedź 23. lipca 2014 в 5:43
77
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
365
Zarejestrowany 1 dzień temu
2
True Image
Zarejestrowany 1 dzień temu
3
archana agarwal
Zarejestrowany 3 dni temu
4
Maxim Zhilyaev
Zarejestrowany 6 dni temu
5
adambotsfford adambotsfford
Zarejestrowany 1 tydzień temu
BG
CS
DA
DE
EL
ES
FR
ID
IT
JA
KO
LT
LV
NL
PL
PT
RU
SK
SL
SV
TR
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem