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



Я знаю, что могу просмотреть разницу между головкой и текущим состоянием с 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


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

572   8  

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 branchname

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

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

git difftool -d stash

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

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

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

http://gist.github.com/498628

конечно, вы потеряете любые изменения, сделанные через 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

    Ничего не найдено.