Посмотреть различия ветвей с meld?
Я знаю, что могу просмотреть разницу между головкой и текущим состоянием с 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? Мне нужно только просмотреть изменения, а не в первую очередь для слияния.
8 ответов:
Я также нашел эту проблему раздражающей, поэтому я сделал git meld, который позволяет более удобный способ дифференцировать произвольные коммиты против рабочего дерева или промежуточной области. Вы можете найти его по адресу https://github.com/wmanley/git-meld . Это немного похоже на сценарий Марка, но работает для сравнения любой произвольной фиксации или промежуточной области или рабочего каталога с любым из других. Если одна из вещей, с которыми вы сравниваете, - это рабочее дерево, то это тоже чтение-запись вы не теряете свои изменения.
короткий и сладкий:
git config --global diff.tool meldэто настраивает Git для использования
meldкак инструмент diff. (Вам не нужно указывать аргументы командной строки, поддержкаmeldвстроен в Git.)затем, если вы хотите графическое различие вместо текстового, вы просто вызываете
git difftoolвместоgit diff(они оба принимают одни и те же аргументы). В вашем случае:git difftool master..devel
Update: если вы не хотите, чтобы разница в один файл за раз, но вместо этого хотите используйте представление "подкаталог" meld со всеми изменениями между двумя ветвями, обратите внимание на
-dили наgit difftool. Например, когда я нахожусь на ветке XYZ, и я хочу увидеть, что отличается между этим и веткой ABC, я запускаю это:git difftool -d ABC
начиная с 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
важно сказать, что с помощью
git difftool -dвы редактирование ваши рабочие файлы в Meld и сохранить их. Для этого вам нужно сравнить некоторую ветвь с вашим текущим рабочим деревом, например:git difftool -d branchnameMeld будет показывать, что левый и правый каталоги расположены в /tmp. Однако файлы в правильном каталоге на самом деле являются символическими ссылками на ваши файлы в текущем рабочем каталоге (не относится к Windows). Так вы можете редактировать их прямо в Meld, и когда вы сохраните их, ваши изменения будут сохранены в вашем рабочем каталоге.
еще более интересным вариантом является сравнение текущего рабочего dir с stash. Вы можете сделать это, просто набрав:
git difftool -d stashзатем вы можете перенести некоторые изменения из тайника (левое окно) в текущую рабочую копию (правое окно), не используя
git stash pop/applyи избегая назойливого разрешения конфликтов, которые могут быть вызваны этими командами.Я думаю, что это может значительно увеличить рабочий процесс с тайниками. Вы можете постепенно переносить изменения из тайника в рабочую копию и фиксировать их один за другим, внося некоторые другие изменения, если хотите.
хотя из других ответов кажется, что на данный момент нет способа сделать это непосредственно в репозитории git, это легко (благодаря ответу на еще вопрос :)) чтобы написать скрипт, который будет извлекать деревья двух коммитов во временные каталоги и запускать meld на них, удаляя оба каталога при выходе из meld:
конечно, вы потеряете любые изменения, сделанные через meld, но это довольно приятно для быстрого обзора различий, я думаю.
Я думаю, что простой способ сделать это с помощью
git reset --soft:цель: сравнить различия между branch_a и branch_b с meld
git checkout branch_a git checkout -b do_diff git reset --soft branch_b meld .
в git V1.7. 9 вы можете сравнить два коммита без командной строки:
необходимо настроить в опции редактирования git графический интерфейс, глобальная: "использование инструментов объединение: объединить".
Start gitk, выберите фиксацию, щелкните правой кнопкой мыши другую фиксацию >" diff this -- > selected". В разделе 'patch' щелкните правой кнопкой мыши файл >"внешних различий".
meld запустится и отобразит все еще выбранный, первый фиксатор с правой стороны.
Если у вас есть чистый рабочий каталог и чистый индекс (или не заботятся об этом) , то это то, что вы хотите:
git diff master..devel | patch -p1 && meld . && git reset --hard
Comments