Посмотреть различия в отраслях с 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