Посмотреть отличия веток со слиянием? - PullRequest
146 голосов
/ 05 января 2010

Я знаю, что могу увидеть разницу между HEAD и текущим состоянием с помощью meld .. Но как я могу увидеть различия между ветками, например master и devel с meld?

На данный момент я делаю следующие шаги:

  1. Переименование папки рабочей копии
    Например mv /projectA /projectA_master)
  2. Клонировать проект снова
    git clone url
  3. Переключиться на devel ветку
    cd projectA && git -b devel origin/devel
  4. Просмотр различий с meld
    meld /projectA_Master projectA

Нет ли более простого способа получить тот же результат в слиянии? Мне это нужно только для просмотра изменений, а не для слияния.

Ответы [ 7 ]

297 голосов
/ 05 января 2010

Короткие и сладкие:

git config --global diff.tool meld

Это позволяет Git использовать meld в качестве инструмента сравнения. (Вам не нужно указывать аргументы командной строки, поддержка meld встроена в Git.)

Тогда, если вам нужен графический diff вместо текстового, вы просто вызываете git difftool вместо git diff (оба они принимают одинаковые аргументы). В вашем случае:

git difftool master..devel

Обновление: если вы не хотите использовать разностный файл, а вместо этого хотите использовать представление подкаталога meld со всеми изменениями между двумя ветвями, обратите внимание на -d или --dir-diff опция для git difftool. Например, когда я нахожусь на ветви XYZ и хочу посмотреть, что отличается между этим и ABC ветви, я запускаю это:

git difftool -d ABC
98 голосов
/ 10 октября 2012

Начиная с git v1.7.11, вы можете использовать git difftool --dir-diff для выполнения сравнения каталогов. Который довольно хорошо работает с meld без https://github.com/wmanley/git-meld сценариев.

Настроить git

git config --global diff.tool meld

Используйте это

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

для 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
51 голосов
/ 30 ноября 2010

Я также обнаружил, что эта проблема раздражает, поэтому я создал git meld, который позволяет более удобно использовать произвольные коммиты для рабочего дерева или рабочей области.Вы можете найти его на https://github.com/wmanley/git-meld.Он немного похож на скрипт Марка, но работает для сравнения любого произвольного коммита, промежуточной области или рабочего каталога с любым другим.Если одна из вещей, с которыми вы сравниваете, - это рабочее дерево, то оно также доступно для чтения и записи, поэтому вы не потеряете свои изменения.

12 голосов
/ 20 марта 2014

Важно сказать, что с помощью git difftool -d вы все еще можете редактировать ваших рабочих файлов в Meld и сохранять их . Для этого вам нужно сравнить какую-то ветку с вашим текущим рабочим деревом, например:

git difftool -d branchname

Meld будет показывать, что левая и правая директории находятся в / tmp. Однако файлы в правильном каталоге на самом деле являются символическими ссылками на ваши файлы в текущем рабочем каталоге (не относится к Windows). Таким образом, вы можете редактировать их прямо в Meld, и когда вы сохраните их, ваши изменения будут сохранены в вашем рабочем каталоге.

Еще более интересный вариант - сравнение текущего рабочего каталога с тайником. Вы можете сделать это, просто набрав:

git difftool -d stash

Затем вы можете перенести некоторые изменения из хранилища (левое окно) в текущую рабочую копию (правое окно), не используя git stash pop/apply и избегая надоедливого разрешения конфликтов, которое может быть вызвано этими командами.

Я думаю, что это может значительно улучшить рабочий процесс с тайниками. Вы можете постепенно переносить изменения из stash в рабочую копию и фиксировать их один за другим, внося некоторые другие изменения, если хотите.

5 голосов
/ 29 июля 2010

Хотя из других ответов кажется, что на данный момент нет способа сделать это непосредственно в репозитории git, легко (благодаря ответу на другой вопрос :)) написать скрипт, который извлекает деревья двух коммитов во временные каталоги и запускает на них объединение, удаляя оба каталога при выходе из объединения:

http://gist.github.com/498628

Конечно, вы потеряете любые изменения, сделанные через meld, но я думаю, что это очень приятно для быстрого обзора различий.

3 голосов
/ 09 сентября 2011

Я думаю, что простой способ сделать это - использовать git reset --soft:

Цель: сравнить различия между branch_a и branch_b с meld

git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .
0 голосов
/ 04 февраля 2014

В git V1.7.9 вы можете сравнить два коммита без командной строки:

Вы должны настроить глобальные параметры редактирования «git gui»: «Использовать инструмент слияния: meld».

Пуск gitk , выберите коммит, щелкните правой кнопкой мыши другой коммит> " diff this -> selected ". Под «патчем» щелкните правой кнопкой мыши файл> « external diff ».

meld запустится и покажет все еще выбранный первый коммит с правой стороны.

...