Git Visual Diff между ветвями


196

Этот ответ отлично подходит для просмотра визуальных различий между двумя файлами, которые включены в git: Как просмотреть вывод 'git diff' с помощью программы визуальных различий?

Тем не менее, я хотел бы видеть визуальный контраст между двумя ветвями. Пока что моя лучшая ставка выглядит так:

git diff --name-status master dev

который не очень информативен и не очень визуален.

Есть ли что-нибудь лучше там?


Я добавил ответ ниже, включая визуальное изображение, которое ранее здесь не было адресовано: как увидеть, какие ветви коммитов содержат (в общем или уникально). Вы можете многое сделать с основной функциональностью git. Возможно, было бы неплохо указать, что вы хотели бы включить в визуальные различия. Большинство ответов сосредоточены на построчном различении коммитов, где ваш пример фокусируется на именах файлов, затронутых в данном коммите.
— Кей V

Ответы:


227

Используйте git diffс диапазоном .

git diff branch1..branch2

Это позволит сравнить советы каждой ветви.

Если вам действительно нужно программное обеспечение с графическим интерфейсом, вы можете попробовать что-то вроде SourceTree, которое поддерживает Mac OS X и Windows.


27
Это не визуальная лань. ;)
— морпехи

35
В системах Linux я рекомендую установить Meld, а затем установить его по умолчанию difftoolс git config --global diff.tool meldи , наконец , запустить его вместо равнины diffс git difftool branch1..branch2. Результат выглядит намного лучше.
— Габриэль

8
с помощью Meld Visual Difftool без git config:git difftool -t meld branch1..branch2
— user3780389

2
Для читателей: Начиная с моего поста, каждый ответ дает способ сделать то, о чем просил человек (разница в графическом интерфейсе), за исключением этого ответа.
— Г Хаксли,

3
@ GHuxley, где ОП запрашивает решение с графическим интерфейсом?
— Алекс

97

Чтобы увидеть визуальные различия всех различий между двумя ветвями, мне нравится объединять эти две ветви - БЕЗ фиксации слияния - и затем использовать git guiили git Extensions, чтобы получить обзор различий.

Командная строка Git для слияния без коммитов:

git checkout branchA
git merge --no-commit --no-ff branchB

Затем, когда вы закончите, вы можете отменить слияние с

git merge --abort

(h / t к @ jcugat's для комментария)


10
Не стоит недооценивать актуальность этого подхода, если вам нравится использование вашей IDE (или другой не всегда простой в интеграции с Git difftool GUI)! Этот вариант для меня замечательный, так как я использую Intellij и предпочитаю иметь возможность прокручивать измененные файлы в IDE во всем его синтаксисе, подсвечивании ошибок, подсвечивании мертвого кода, редактировании на месте. Я использую этот подход для всех моих обзоров кода, и я оставил ужасный инструмент для сравнения запросов на загрузку в GitHub. Я даже могу вносить изменения по ходу работы, а когда я закончу, я просто создаю новую ветку с добавленным «-code-review» и фиксирую!
— kghastie

2
Он работает до тех пор, пока нет конфликтов слияния, и завершается ошибкой при любых конфликтах слияния.
— Нага Киран

1
Мне очень нравится такой подход! Кроме того, по крайней мере для меня в git guiнем показаны конфликты как неустановленные, а не конфликты как постановочные, так что вы получите хорошее различие даже. Помогает мне гораздо больше, чем самый лучший ответ: D
— DJGummikuh

55

Если вы используете Intellij Idea IDE, вы можете просто использовать опцию сравнения в ветке.

введите описание изображения здесь


Есть ли какие-либо конфигурации / опции / настройки, чтобы изменить это сравнение? (например, --ignore-space-at-eol для git diff)
— Superole

49

Вы также можете легко сделать это с помощью gitk.

> gitk branch1 branch2

Сначала нажмите на кончик ветки1. Теперь щелкните правой кнопкой мыши на кончике branch2 и выберите Diff this-> selected.


7
Использование gitk branch1..branch2только показывает коммиты между двумя ревизиями.
— T3rm1

используя gitk (без branch1 branch2), если вы хотите увидеть все изменения, которые вы внесли в вашу ветку.
— mikewasmike

31

Для тех из вас, кто использует Windows в TortoiseGit, вы можете получить несколько визуальное сравнение с помощью этой довольно неясной функции:

  1. Перейдите к папке, которую вы хотите сравнить
  2. Удерживайте shiftи щелкните правой кнопкой мыши
  3. Перейти к TortoiseGit -> Обзор ссылок
  4. Используйте, ctrlчтобы выбрать две ветви для сравнения
  5. Щелкните правой кнопкой мыши ваш выбор и нажмите «Сравнить выбранные ссылки»

Источник: http://wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/


Почему вы должны удерживать смену?
— Ноль3

1
Удерживая нажатой клавишу shift при щелчке правой кнопкой мыши, всегда открывается полное меню TortoiseGit, если вы настроили TortoiseGit, чтобы он не отображал определенные элементы.
— Oversearch

Это круто. Хотелось бы, чтобы это была более заметная особенность.
— Дрю

22

Если вы используете OSX или Windows 7+, Atlassian SourceTree работает очень хорошо для этого. Это бесплатно.

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

введите описание изображения здесь

Предполагая, что вы отметили ветвь объекта и хотите увидеть разницу с «master», щелкните правой кнопкой мыши ветку «master» и выберите «Diff против тока».

К сожалению, не похоже, что он будет доступен в дистрибутивах * nix в ближайшее время .


3
Это может быть «бесплатно», но, безусловно, требуется некоторое время, чтобы прочитать их регистрационные условия использования: atlassian.com/legal/customer-agreement Мне до сих пор нравился инструмент, но это может оттолкнуть меня.
— akauppi

@akauppi Какие части вас отталкивают? Я думал , что все эти соглашения были в значительной степени то же самое
— Алекс

Это было больше года назад. Да, соглашения могут быть похожими, но это был процесс, который подталкивал меня к SourceTree. Это было странно. Прошло, однако. У меня не будет подробностей для вас. Извините
— akauppi

16

Попробуйте "difftool" (при условии, что у вас есть настройки diff) - см. Https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html.

Я нахожу статус имени хорошим для сводки, но difftool будет повторять изменения (и -dопция дает вам представление каталога), например

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

Или, как упомянуто @ rsilva4 с -dтекущей веткой и по умолчанию это просто - например, сравните с master:

$  git difftool -d master..

... и да - есть много вариантов - https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
Спасибо, это было полезно. Добавление опции -d сделает вещи еще лучше:git difftool -d their-abc my-abc
— rsilva4

Так как в данный момент на -d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
— сайтеhellhell.com нет

8

Если вы используете GitHub, вы можете использовать веб-сайт для этого:

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

Это покажет вам сравнение двух.


Это работает (я делаю это все время), но требует, чтобы вы отправили свой код в репозиторий github. Хотя, на мой взгляд, это не совсем приемлемая оговорка.
— adamwong246

2
или просто так github.com/url/to/your/repo/compare/и потом можно выбирать ветки
— карамба

И как мне получить этот SHA? Я имею в виду, что означает SHA кончика ветви?
— Оптимус Прайм

8

В GitExtensions вы можете выбрать обе ветви в сетке ревизий Ctrlнажатием. Затем вы можете увидеть файлы, которые отличаются между этими ветвями. Когда вы выберете файл, вы увидите diff для него.

Взято отсюда


У меня выбрано 2 ветви в моей сетке ревизий, но я не вижу никаких команд сравнения в меню вверху или когда я щелкаю правой кнопкой мыши.
— Эрик

1
Я нашел это в заголовках нижней панели. Есть Коммит, Дерево файлов и Дифф.
— Эрик

7

ОБНОВИТЬ

Mac: сейчас я использую SourceTree. Тщательно рекомендуется. Мне особенно нравится, как вы можете ставить / не ставить куски.

Linux: я имел успех с:

  • SmartGit
  • GitKraken
  • meld

Например, чтобы установить smartgitна Ubuntu:


Это делает работу:

git-diffall с инструментом различий в GUI, таким как meld. Смотрите пункт 5 здесь:

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

Здесь есть хороший пост о git и meld: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

Если вы используете Eclipse, вы можете визуально сравнить текущую ветку в рабочей области с другим тегом / веткой:

Сравнение рабочего пространства Eclipse


Лично я нахожу поддержку Eclipse для различий, но если это все, что у вас есть, то все в порядке.
— ysap

4

Вы также можете использовать бесплатный P4Merge от Perforce, чтобы сделать это:

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

введите описание изображения здесь

Подробности его интеграции с Git можно найти здесь и здесь.

но краткое резюме по ссылкам выше:

  • Поместите следующие биты в ваш ~ / .gitconfig, и тогда вы можете сделать $ git mergetoolи$ git difftool использовать p4merge
  • Обратите внимание, что по- $ git diffпрежнему будет использоваться встроенное средство просмотра различий по умолчанию :) (протестировано с версией git 1.8.2)

Изменения для .gitconfig

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

Если вы используете отличный редактор WebStorm, вы можете сравнить его с любой веткой: Webstorm Git сравнить


На самом деле я только что заметил, что IntelliJ IDEA (предположительно также WebStorm) обладает способностью «Выделять невыбранные коммиты», что очень четко показывает, какие коммиты существуют в ветви, а не в другом.
— arthurakay

Да, я просто использовал intellij, чтобы выборочно откатить множество изменений, внесенных в репо, с помощью «автоформата при сохранении». Было очень легко ... Нужно было найти опцию «Сравнить раньше с местным», чтобы сделать это, хотя
— Том Х

1

Посмотри на git show-branch

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

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

Для этого визуала я большой поклонник git show-branch; он разбивает хорошо организованную таблицу коммитов на ветку назад к общему предку. - чтобы попробовать его в репо с несколькими ветвями с расхождениями, просто наберите git show-branchи проверьте вывод - для рецензии с примерами см. Сравнение коммитов между ветвями Git


0

Вот как можно увидеть визуальную разницу между целыми коммитами, в отличие от отдельных файлов, в Visual Studio (протестировано в VS 2017). К сожалению, он работает только для коммитов в пределах одной ветви: в «Team Explorer» выберите представление «Branches», щелкните правой кнопкой мыши по репо и выберите «View history», как показано на следующем рисунке.

введите описание изображения здесь

Затем история текущей ветки появляется в основной области. (Там, где ветви, которые закончились как более ранние коммиты на текущей ветке, помечены метками.) Теперь выберите пару коммитов с помощью Ctrl-Left, затем щелкните правой кнопкой мыши и выберите «Сравнить коммиты ...» во всплывающем меню.

Более подробную информацию о сравнении филиалов в мире Microsoft, увидеть этот StackOverflow вопрос: Различия между GIT ветвей с помощью Visual Studio .


1
Показывает только историю одной ветви, поэтому не может сравнивать между ветками.
— Михал Фита

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.