git wizualna różnica między gałęziami


196

Ta odpowiedź jest świetna do zobaczenia wizualnej różnicy między dwoma plikami, które są wpisane do git: Jak wyświetlić wyjście „git diff” za pomocą programu do wizualnego porównania?

Chciałbym jednak zobaczyć wizualną różnicę między dwiema gałęziami. Jak dotąd moim najlepszym zakładem wydaje się być:

git diff --name-status master dev

co nie jest zbyt pouczające i niezbyt wizualne.

Czy jest tam coś lepszego?


Poniżej dodałem odpowiedź, w tym obraz, który wcześniej nie był adresowany: jak sprawdzić, które gałęzie zatwierdzeń zawierają (wspólne lub unikalne). Jest wiele rzeczy, które możesz zrobić z podstawową funkcjonalnością git. Dobrze jest określić, co chcesz uwzględnić w różnicach wizualnych. Większość odpowiedzi skupia się na różnicach zatwierdzeń linia po linii, gdzie twój przykład koncentruje się na nazwach plików, których dotyczy dany zatwierdzenie.
Kay V

Odpowiedzi:


227

Użyj git diffz zakresem .

git diff branch1..branch2

Spowoduje to porównanie wskazówek z każdej gałęzi.

Jeśli naprawdę potrzebujesz oprogramowania GUI, możesz wypróbować coś takiego jak SourceTree, który obsługuje Mac OS X i Windows.


27
To nie jest wizualna łania. ;)
marines

35
W systemach Linux zalecam instalację Meld, a następnie ustawienie jej jako domyślnej za difftoolpomocą git config --global diff.tool meldi wreszcie uruchomienie zamiast zwykłego za diffpomocą git difftool branch1..branch2. Rezultat jest znacznie ładniejszy.
Gabriel

8
za pomocą meldunku wizualny difftool bez git config:git difftool -t meld branch1..branch2
user3780389

2
Dla czytelników: Począwszy od mojego postu, każda odpowiedź tutaj daje sposób na zrobienie tego, o co poprosiła (różnica w GUI), z wyjątkiem tej odpowiedzi.
G Huxley,

3
@GHuxley, gdzie OP prosi o rozwiązanie GUI?
alex

97

Aby zobaczyć wizualną różnicę wszystkich różnic między dwiema gałęziami, chcę scalić dwie gałęzie - BEZ zatwierdzenia scalenia - a następnie użyć git guilub git Extensions, aby uzyskać przegląd różnic.

Wiersz polecenia Git do łączenia bez zatwierdzania:

GIT Checkout BranchA
git merge --no-commit --no-ff oddział B

Po zakończeniu możesz cofnąć scalenie

git merge --abort

(h / t do @ jcugat za komentarz)


10
Nie lekceważ znaczenia tego podejścia, jeśli lubisz używać swojego IDE (lub innego nie zawsze łatwego do zintegrowania z Git GUI difftool)! Ta opcja jest dla mnie niesamowita, ponieważ korzystam z Intellij i zdecydowanie wolę przeglądać zmodyfikowane pliki w IDE, w całej okazałości wyróżnionej składnią, wyróżnionej błędem, wyróżnionej kodem, edytowalnej na miejscu. Używam tego podejścia do wszystkich recenzji kodu i pozostawiłem daleko idące narzędzie do porównywania żądań ściągania w GitHub. Mogę nawet wprowadzać zmiany na bieżąco, a kiedy to zrobię, po prostu tworzę nowy oddział z dołączoną „weryfikacją kodu” i zatwierdzam!
kghastie

2
Działa tak długo, jak nie ma konfliktów scalania i kończy się niepowodzeniem, gdy występują konflikty scalania.
Naga Kiran

1
Bardzo podoba mi się takie podejście! Ponadto, przynajmniej dla mnie git gui, pokazuje konflikty jako nie zainscenizowane, a konflikty jako zainscenizowane, więc masz dobre rozróżnienie. Pomaga mi znacznie więcej niż najwyżej oceniana odpowiedź: D
DJGummikuh 19.04.16

55

Jeśli korzystasz z Intellij Idea IDE, możesz po prostu skorzystać z opcji porównania w oddziale.

wprowadź opis zdjęcia tutaj


czy są jakieś konfiguracje / opcje / ustawienia modyfikujące to porównanie? (jak --ignore-space-at-eol dla git diff)
Superole

49

Możesz to również łatwo zrobić za pomocą gitk.

> gitk branch1 branch2

Najpierw kliknij końcówkę oddziału 1. Teraz kliknij prawym przyciskiem myszy końcówkę oddziału2 i wybierz Zróżnicuj to-> wybrane.


7
Użycie gitk branch1..branch2tylko pokazuje zatwierdzenia między dwiema wersjami.
T3rm1

używając gitk (bez oddziału 1 oddział2), jeśli chcesz zobaczyć wszystkie zmiany, które dokonałeś w swoim oddziale.
mikewasmike

31

Dla tych z Was, którzy używają Windowsa za pomocą TortoiseGit, można uzyskać nieco wizualne porównanie dzięki tej dość niejasnej funkcji:

  1. Przejdź do folderu, który chcesz porównać
  2. Przytrzymaj shifti kliknij prawym przyciskiem myszy
  3. Idź do TortoiseGit -> Przeglądaj odnośnik
  4. Użyj, ctrlaby wybrać dwie gałęzie do porównania
  5. Kliknij zaznaczenie prawym przyciskiem myszy i wybierz „Porównaj wybrane referencje”

Źródło: http://wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/


Dlaczego powinieneś przytrzymać Shift?
Zero3

1
Przytrzymanie klawisza Shift podczas klikania prawym przyciskiem myszy zawsze powoduje wyświetlenie pełnego menu TortoiseGit, na wypadek gdyby skonfigurowałeś TortoiseGit, aby nie pokazywał niektórych elementów.
Przeszukanie

To jest niesamowite. Chciałbym, żeby była to bardziej widoczna funkcja.
Drew

22

Jeśli używasz OSX lub Windows 7+, Atlassian SourceTree działa w tym przypadku bardzo dobrze. To jest darmowe.

Możesz zobaczyć zmiany etapowe w konfiguracji różnicowego side-by-side i łatwo porównać lokalny ze zdalnym i dowolnymi dwoma innymi gałęziami. Gdy wybranych jest wiele plików, diff pokazuje się jak poniżej:

wprowadź opis zdjęcia tutaj

Zakładając, że sprawdziłeś gałąź funkcji i chcesz zobaczyć różnicę względem „wzorca”, kliknij prawym przyciskiem myszy gałąź „wzorca” i wybierz „Zróżnicuj względem prądu”

Niestety nie wydaje się, że będzie dostępny w wkrótce w dystrybucji * nix .


3
Może być „darmowy”, ale z pewnością wymaga czasu na zapoznanie się z warunkami rejestracji: atlassian.com/legal/customer-agreement Do tej pory podobało mi się to narzędzie, ale może mnie to zniechęcać .
akauppi,

@akauppi Które części Cię zniechęcają? Myślałem, że wszystkie te umowy były prawie takie same
alex

To było ponad rok temu. Tak, umowy mogą być podobne, ale był to proces, który popychał mnie przez SourceTree. To było dziwne. Jednak Bygones. Nie będę miał dla ciebie szczegółów. Przepraszamy
akauppi

16

Wypróbuj „difftool” (zakładając, że masz skonfigurowane narzędzia do porównywania) - patrz https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

Uważam, że status nazwy jest dobry dla podsumowania, ale difftool będzie iterował zmiany (a -dopcja daje widok katalogu), np.

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

Lub, jak wspomniano w @ rsilva4 -di domyślnie w bieżącej gałęzi, jest to po prostu - np. Porównaj do master:

$  git difftool -d master..

... i tak - istnieje wiele odmian - https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
Dziękuję, to było przydatne. Dodanie opcji -d sprawi, że będzie jeszcze lepiej:git difftool -d their-abc my-abc
rsilva4 24.04.14

Ponieważ wydaje się, że w tej chwili -d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
wyjaśnienia na stroniehellhell.com

8

Jeśli używasz github, możesz do tego użyć strony internetowej:

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

To pokaże porównanie tych dwóch.


To działa (robię to cały czas), ale wymaga wypchnięcia kodu do repozytorium github. Jednak moim zdaniem nie jest to do zaakceptowania zastrzeżenie.
adamwong246

2
lub właśnie github.com/url/to/your/repo/compare/wtedy możesz wybrać oddziały
caramba

I jak mogę uzyskać ten SHA? Mam na myśli, co oznacza SHA wierzchołka gałęzi?
Optimus Prime

8

W GitExtensions można wybrać oba oddziały w siatce wersji za pomocą Ctrlprzycisku. Następnie możesz zobaczyć pliki, które różnią się między tymi gałęziami. Po wybraniu pliku zobaczysz dla niego diff.

Zabrano stąd


Mam wybrane 2 gałęzie w mojej siatce wersji, ale nie widzę żadnych poleceń porównania w menu u góry ani po kliknięciu prawym przyciskiem myszy.
Eric,

1
Znalazłem to w nagłówkach dolnej szyby. Istnieją Commit, drzewo plików i Diff.
Eric

7

AKTUALIZACJA

Mac: Teraz używam SourceTree. Dokładnie zalecane. Szczególnie podoba mi się sposób, w jaki możesz przedstawiać / pokazywać przystojniaków.

Linux: Miałem sukces z:

  • smartgit
  • GitKraken
  • meld

Np. Zainstalować smartgitna Ubuntu:


To działa:

git-diffall z narzędziem GUI diff, takim jak meld. Zobacz punkt 5 tutaj:

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

Jest miły post o git i meld tutaj: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

Jeśli używasz Eclipse, możesz wizualnie porównać bieżącą gałąź w obszarze roboczym z inną etykietą / gałęzią:

Porównanie obszaru roboczego Eclipse


Osobiście uważam obsługę Eclipse dla różnicowania sub-par, ale jeśli to wszystko, co masz, to jest OK.
ysap

4

Możesz również skorzystać z bezpłatnego P4Merge od Perforce:

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

wprowadź opis zdjęcia tutaj

Szczegółowe informacje na temat integracji z Git można znaleźć tutaj i tutaj

ale krótkie podsumowanie z powyższych linków to:

  • Umieść następujące bity w ~ / .gitconfig, a następnie możesz zrobić $ git mergetooli $ git difftoolużyć p4merge
  • Zauważ, że $ git diffnadal będziesz używać tylko domyślnej wbudowanej przeglądarki różnic :) (testowane z wersją git 1.8.2)

Zmiany w .gitconfig

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

Jeśli korzystasz z doskonałego edytora WebStorm, możesz porównać z dowolnym oddziałem, który chcesz: Webstorm git porównaj


Właśnie zauważyłem, że IntelliJ IDEA (przypuszczalnie także WebStorm) ma możliwość „Podświetlania niepobranych zatwierdzeń”, co wyraźnie pokazuje, które zatwierdzenia istnieją w oddziale, ale nie w innym.
arthurakay

Tak, właśnie użyłem intellij do selektywnego wycofania wielu zmian dokonanych w repozytorium przez „autoformatowanie przy zapisie”. To było bardzo łatwe ... Musiałem jednak znaleźć opcję „Porównaj wcześniej z lokalnymi”, aby to zrobić
Tom H

1

Spójrz na git show-branch

Jest wiele rzeczy, które możesz zrobić z podstawową funkcjonalnością git. Dobrze jest określić, co chcesz uwzględnić w różnicach wizualnych. Większość odpowiedzi skupia się na różnicach zatwierdzeń linia po linii, gdzie twój przykład koncentruje się na nazwach plików, których dotyczy dany zatwierdzenie.

Jednym z elementów wizualnych, które wydaje się nie być omówione, jest sposób sprawdzania zmian zawartych w gałęziach (wspólnych lub unikatowych).

W przypadku tego obrazu jestem wielkim fanem git show-branch; wyłamuje dobrze zorganizowaną tabelę zobowiązań dla każdej gałęzi z powrotem do wspólnego przodka. - aby wypróbować go w repozytorium z wieloma gałęziami z rozbieżnościami, po prostu wpisz git show-branchi sprawdź dane wyjściowe - aby uzyskać opis z przykładami, zobacz Porównywanie zobowiązań między gałęziami Git


0

Oto jak zobaczyć wizualną różnicę między całymi zatwierdzeniami, a nie pojedynczymi plikami, w Visual Studio (testowane w VS 2017). Niestety działa tylko w przypadku zatwierdzeń w ramach jednej gałęzi: w „Eksploratorze zespołu” wybierz widok „Oddziały”, kliknij repo prawym przyciskiem myszy i wybierz „Wyświetl historię”, jak na poniższym obrazku.

wprowadź opis zdjęcia tutaj

Następnie historia bieżącego oddziału pojawia się w głównym obszarze. (Gdzie gałęzie, które zakończyły się jako wcześniejsze zatwierdzenia w bieżącej gałęzi, są oznaczone etykietami.) Teraz wybierz kilka zatwierdzeń za pomocą Ctrl-Lewy, a następnie kliknij prawym przyciskiem myszy i wybierz „Porównaj zatwierdzenia ...” z menu podręcznego.

Więcej informacji na temat porównywania gałęzi w świecie Microsoft znajduje się w pytaniu dotyczącym przepełnienia stosu : Różnice między gałęziami git za pomocą programu Visual Studio .


1
Pokazuje tylko historię jednej gałęzi, więc nie można porównywać między gałęziami.
Michał Fita,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.