Zobacz różnice gałęzi z meld?

Wiem, że mogę zobaczyć różnicę między głową a aktualnym stanem za pomocą meld .. Ale jak Mogę zobaczyć różnice między gałęziami, na przykład master i devel z meld?

W tej chwili wykonuję następujące kroki:

  1. Zmień nazwę folderu kopii roboczej
    Na przykład mv /projectA /projectA_master)
  2. Klonuj projekt ponownie
    git clone url
  3. Przełącz na devel Oddział
    cd projectA && git -b devel origin/devel
  4. Zobacz różnice z meld
    meld /projectA_Master projectA

Isn ' t there an łatwiejszy sposób na uzyskanie tego samego wyniku w meld? Potrzebuję go tylko do przeglądu zmian, a nie przede wszystkim do scalania.

Author: Marten Bauer, 2010-01-05

8 answers

Ten problem również mnie denerwował, więc zrobiłem git meld, który pozwala na wygodniejszy sposób różnicowania arbitralnych commitów względem drzewa roboczego lub obszaru postoju. Znajdziesz go pod adresem https://github.com/wmanley/git-meld . Jest to trochę jak skrypt marka, ale działa do porównywania dowolnych zatwierdzeń, przestrzeni postojowej lub katalogu roboczego z innymi. Jeśli jedną z rzeczy, z którymi porównujesz, jest drzewo robocze, to jest to również odczyt-zapis, więc nie pozbądź się zmian.

 51
Author: Will Manley,
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
2010-11-30 09:24:41

Short & sweet:

git config --global diff.tool meld

To skonfiguruje Git do używania meld jako narzędzia diff. (Nie musisz podawać argumentów wiersza poleceń, wsparcie dla meld jest wbudowane w Git.)

Następnie, jeśli chcesz graficznego różnicowania zamiast tekstowego, po prostu wywołaj git difftool zamiast git diff (obie przyjmują te same argumenty). W Twoim przypadku:

git difftool master..devel

Update: jeśli nie chcesz rozróżniać jeden plik na raz, ale zamiast tego chcesz użyć widoku "podkatalogu" meld z wszystkimi zmiany między dwiema gałęziami, zwróć uwagę na opcję -d lub --dir-diff dla git difftool. Na przykład, gdy jestem na gałęzi XYZ i chcę zobaczyć, czym różni się to od gałęzi ABC, uruchamiam to:

git difftool -d ABC
 283
Author: Jörg W Mittag,
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
2015-03-10 11:13:30

Począwszy od git v1. 7.11, możesz użyć git difftool --dir-diff do wykonania rozróżnienia katalogów. Który działa całkiem dobrze z meld wihout https://github.com/wmanley/git-meld Skrypty.

Configure git

git config --global diff.tool meld

Użyj go

git difftool -d topic             // -d is --dir-diff
git difftool -d master..topic

Dla macOS

brew cask install meld
git config --global difftool.meld.cmd 'open -W -a Meld --args \"$LOCAL\" \"$PWD/$REMOTE\"'
git config --global difftool.meld.trustExitCode true
 92
Author: GutenYe,
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
2016-10-27 04:26:40

Ważne jest, aby powiedzieć, że używając git difftool -d możesz nadal edytowaćswoje pliki robocze w Meld i zapisać je. Aby to osiągnąć, musisz porównać jakąś gałąź z bieżącym drzewem roboczym, na przykład:

git difftool -d branchname

Meld pokaże, że zarówno lewy jak i prawy katalog znajduje się w /tmp. Jednak pliki w odpowiednim katalogu są w rzeczywistości dowiązaniami symbolicznymi do plików w bieżącym katalogu roboczym (Nie dotyczy systemu Windows). Więc możesz je edytować bezpośrednio w Meld i po ich zapisaniu twoje zmiany zostaną zapisane w katalogu roboczym.

Jeszcze ciekawszą opcją jest porównanie bieżącego katalogu roboczego ze stashem. Możesz to zrobić po prostu wpisując:

git difftool -d stash

Następnie możesz przenieść pewne zmiany ze schowka (lewe okno) do bieżącej kopii roboczej (prawe okno), bez używania git stash pop/apply i unikania kłopotliwego rozwiązywania konfliktów, które mogą być wywołane przez te polecenia.

Myślę, że może znacznie zwiększyć przepływ pracy z stashes. Możesz stopniowo przenosić zmiany ze skrytki do kopii roboczej i zatwierdzać je jeden po drugim, wprowadzając kolejne zmiany, jeśli chcesz.

 9
Author: Piotr Jurkiewicz,
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
2014-08-16 01:45:12

Chociaż z pozostałych odpowiedzi wydaje się, że nie ma na to obecnie sposobu, aby to zrobić bezpośrednio w repozytorium git, łatwo jest (dzięki odpowiedzi na kolejne pytanie :)) napisać skrypt, który wyodrębni drzewa dwóch commitów do katalogów tymczasowych i uruchomi na nich meld, usuwając oba katalogi po zakończeniu meld:

Http://gist.github.com/498628

Oczywiście stracisz wszelkie zmiany wprowadzone przez meld, ale jest to całkiem miłe dla szybkiego przeglądu myślę, że o różnicach.

 5
Author: Mark Longair,
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-05-23 11:47:05

Myślę, że łatwym sposobem na to jest użycie git reset --soft:

Cel: porównaj różnice między branch_a i branch_b z meld

git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .
 5
Author: realtime,
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
2011-12-15 17:48:42

W git V1. 7. 9 Możesz porównać dwa commity bez wiersza poleceń:

Musisz skonfigurować w 'Git gui' opcje edycji, globalne: "Use merge tool: meld".

Uruchom gitk, Wybierz commit, kliknij prawym przyciskiem myszy inny commit > " diff this -- > selected ". W polu 'patch' kliknij prawym przyciskiem myszy plik > " external diff ".

Meld uruchomi i wyświetli wciąż wybrany, pierwszy commit po prawej stronie.

 1
Author: Stefan Forster,
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
2014-02-03 21:46:54

Jeśli masz czysty katalog roboczy i czysty indeks (lub nie dbasz o to), to to czego chcesz:

git diff master..devel | patch -p1 && meld . && git reset --hard
 0
Author: sqrt163,
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-26 10:43:52