2013-08-08 13 views
40

Załóżmy, że jestem w gałęzi Git master i I git merge featurebranch. Występuje konflikt w foo.html.Jak mogę zobaczyć "trójdrożną różnicę" dla konfliktu Git Merge?

Po otwarciu foo.html widzę, w obszarze konfliktu, co ma master i co ma . Ale tak naprawdę nie mogę powiedzieć, , co zmiana została wykonana na master, która kolidowała z featurebranch; Wiem tylko, co mistrz ma teraz.

Chciałbym zobaczyć diff, że każdy zastosowany.

Lub, aby uzyskać tę samą informację, mogłem zobaczyć:

  • Wersja master ma teraz
  • Wersja featurebranch ma teraz
  • Wersja ich wspólny przodek miał

Jak mogę to zobaczyć?

Odpowiedz

61

Od git-merge(1),

Alternatywny styl może być stosowany przez ustawienie "merge.conflictstyle" konfiguracji zmienną "diff3".

Oprócz <<<<<<<, ======= i >>>>>>> markerów wykorzystuje inny ||||||| znacznika, po którym następuje z tekstem. Możesz powiedzieć, że oryginał po prostu stwierdził fakt, a twoja strona po prostu poddała się temu stwierdzeniu i poddała się, podczas gdy druga strona próbowała mieć bardziej pozytywne nastawienie. Czasami można uzyskać lepszą rozdzielczość, wyświetlając oryginał.

ten można włączyć za pomocą

$ git config --global merge.conflictstyle diff3 
+3

To jest fantastyczne! Dziękuję Ci! W międzyczasie odkryłem 'git mergetool', który (dla mnie) otwiera' vimdiff' z kilkoma oknami pokazującymi podobne informacje, ale ja lubię twoją metodę lepiej. –

+1

@NathanLong: btw, 'mergetool' jest naprawdę miłe przy użyciu' kdiff3' – Hasturkun

12

dużo GUI diff/scalania narzędzia mają 3 lub 4 drożny widok scalania. Bardzo polecam Beyond Compare do rozwiązywania konfliktów scalania. Inne (w porządku) narzędzie to DiffMerge.

Można skonfigurować niestandardowy atrybut mergetool, który będzie używany z poleceniem git mergetool. To jest moja konfiguracja .gitconfig dla Beyond Compare (Pro Edition) i DiffMerge na moim komputerze Windows przy użyciu msysGit:

[merge] 
    tool = bc3 
[diff] 
    tool = bc3 
[difftool "dm"] 
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\" 
[difftool "bc3"] 
    cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"" 
[mergetool "bc3"] 
    cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"" 

Możesz przeczytać więcej o różnych konfiguracjach narzędzia diff/scalania w official Linux Kernel Git documentation for git config.

+1

+1 dla Beyond Compare! Używam wersji Pro od lat i uwielbiam to. Ich wsparcie jest również doskonałe. – TrueWill

+0

Zrzut ekranu 3-way merge dla Beyond Compare ma taki sam układ okien jak w 'vimdiff'. –

+2

Byłbym bardzo wdzięczny za wyjaśnienie wszelkich spadków do tej odpowiedzi. Biorąc pod uwagę, że dostarczam konfiguracje robocze dla [popularnych zewnętrznych narzędzi do porównywania i scalania] (http://www.codinghorror.com/blog/2005/11/in-praise-of-beyond-compare.html) dla instalacji msysgit w systemie Windows , Myślę, że moja odpowiedź zapewnia wielką wartość. –

Powiązane problemy