Посмотреть различия в отраслях с meld?

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

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

  • Переименовать папку рабочей копии
      Например mv /projectA /projectA_master)
  • Повторное клонирование проекта
      git clone url
  • Перейдите в ветку devel
      cd projectA && git -b devel origin/devel
  • Просмотр различий с meld
      meld /projectA_Master projectA

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

Ответ 1

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

Ответ 2

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

git config --global diff.tool meld

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

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

git difftool master..devel

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

git difftool -d ABC

Ответ 3

Начиная с git v1.7.11, вы можете использовать git difftool --dir-diff для выполнения diff каталога. Что хорошо работает с meld wihout 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

Ответ 4

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

git difftool -d branchname

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

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

git difftool -d stash

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

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

Ответ 5

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

http://gist.github.com/498628

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

Ответ 6

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

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

git checkout branch_a
git checkout -b do_diff
git reset --soft branch_b
meld .

Ответ 7

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

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

Запустите gitk, выберите фиксацию, щелкните правой кнопкой другой фиксатоp > " разделить это → выбранный". В разделе "patch" щелкните правой кнопкой мыши файл > " внешний diff".

meld запустится и отобразит выбранное значение, сначала зафиксируйте его с правой стороны.

Ответ 8

Если у вас есть чистый рабочий каталог и чистый индекс (или его не волнует), тогда это то, что вы хотите:

git diff master..devel | patch -p1 && meld . && git reset --hard