git visual різняться між гілками


196

Ця відповідь чудово підходить для того, щоб побачити візуальну різницю між двома файлами, які перевіряються на git: Як я бачу вихід "git diff" за допомогою програми для візуального розгляду?

Однак я хотів би бачити візуальну різницю між двома гілками. Поки, здається, найкраща моя ставка:

git diff --name-status master dev

що не дуже інформативно і не дуже наочно.

Чи є щось краще там?


Нижче я додав відповідь, включаючи наочне зображення, яке раніше не було адресовано: як бачити, які гілки комітетів містять (спільно чи однозначно). З функцією core git можна багато чого зробити. Можливо, буде добре вказати, що ви хочете включити у свою візуальну різницю. Більшість відповідей зосереджуються на рядкових рядках комітетів, де ваш приклад зосереджується на іменах файлів, які впливають на певний коміт.
Kay V

Відповіді:


227

Використовуйте git diffз асортиментом .

git diff branch1..branch2

Це дозволить порівняти поради кожної галузі.

Якщо ви дійсно хочете програмного забезпечення GUI, ви можете спробувати щось на зразок 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
Для читачів: Що стосується мого допису, кожна відповідь тут дає змогу зробити те, що запитувала людина (різниця в графічному інтерфейсі), окрім цієї відповіді.
G Huxley

3
@GHuxley, де ОП запитує рішення щодо графічного інтерфейсу?
алекс

97

Щоб побачити візуальну різницю всіх відмінностей між двома гілками, я люблю об'єднувати дві гілки - БЕЗ вчинення злиття - і потім використовувати git guiабо git Extensions, щоб отримати огляд відмінностей.

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

відділення каси git
git merge --no-commit --no-ff гілкаB

Потім, коли закінчите, ви можете скасувати злиття

git merge --аборт

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


10
Не варто недооцінювати актуальність цього підходу, якщо вам подобається використовувати свій IDE (або інший не завжди простий для інтеграції графічний інтерфейс із Git Diftool)! Цей варіант є для мене приголомшливим, оскільки я використовую Intellij і переважно вважаю можливим прокручувати модифіковані файли в IDE, у всьому його синтаксисі, підкресленому помилками, підкресленому мертвим кодом, редагованою на місці славою. Я використовую цей підхід для всіх моїх перевірок коду, і я покинув інструмент порівняння запитів безпроблемного витягу в GitHub далеко позаду. Я навіть можу вносити зміни, коли я ходжу, і коли закінчу, я просто створюю нову гілку із доданим "кодом-оглядом" та виконуючи обов'язки!
kghastie

2
Він працює до тих пір, поки немає конфліктів злиття і не вдається, коли є конфлікти злиття.
Нага Кіран

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

55

Якщо ви використовуєте Intellij Idea IDE, ви можете просто скористатися параметром порівняння у філії.

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


чи є якісь конфігурації / параметри / налаштування для зміни цього порівняння? (наприклад, --ignore-space-at-eol for git diff)
Superole

49

Ви також можете легко це зробити за допомогою gitk.

> gitk branch1 branch2

Спочатку натисніть на кінчик гілки1. Тепер клацніть правою кнопкою миші на кінчику гілки2 та виберіть Diff this-> selected.


7
Використання gitk branch1..branch2лише показує коміти між двома редакціями.
T3rm1

використовуючи gitk (без відділення1 відділення2), якщо ви хочете побачити всі внесені вами зміни у вашу гілку.
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/


Чому слід утримувати зміну?
Zero3

1
Утримуючи зсув під час клацання правою кнопкою миші завжди відображається повне меню TortoiseGit, якщо ви налаштували TortoiseGit не показувати певні елементи.
Оверсарх

Це круто. Бажайте, щоб це було більш помітною рисою.
Дрю

22

Якщо ви використовуєте OSX або Windows 7+, Atlassian SourceTree дуже добре працює для цього. Це безкоштовно.

Ви можете бачити поетапні зміни в налаштуваннях бічних сторін різниці, і ви легко порівнюєте місцеві з віддаленими та будь-якими іншими двома гілками. Якщо вибрано кілька файлів, розмін відображається, як показано нижче:

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

Якщо припустити, що ви перевірили гілку функції та хочете побачити відмінність від 'master', клацніть правою кнопкою миші на гілку 'master' та виберіть "Diff against current"

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

$  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.
жаль, пояснюється, що обяснюється, що роз'яснення сайту

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/і тоді ви можете вибрати гілки
caramba

І як я можу отримати цю SHA? Я маю на увазі, що означає SHA кінчика гілки?
Optimus Prime

8

У GitExtensions можна вибрати обидві гілки в ревізійній сітці з Ctrlнатиснутою. Тоді ви можете побачити файли, які відрізняються між цими гілками. Вибравши файл, ви побачите різницю для нього.

Взято звідси


У моїй ревізійній сітці вибрано 2 гілки, але я не бачу жодних команд порівняння в меню вгорі або під час клацання правою кнопкою миші.
Ерік

1
Я знайшов це в заголовках нижньої панелі. Існують коміти, дерево файлів і Diff.
Ерік

7

ОНОВЛЕННЯ

Mac: Зараз я використовую SourceTree. Ретельно рекомендується. Мені особливо подобається те, як ти можеш влаштовувати / нестабільно лукавити.

Linux: Я мав успіх у:

  • smartgit
  • GitKraken
  • meld

Наприклад, щоб встановити smartgitна Ubuntu:


Це виконує роботу:

git-diffall з інструментом GUI diff, наприклад meld. Дивіться пункт 5 тут:

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

Тут є хороший пост про git and 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 і раніше використовуватимуться стандартний Inline diff viewer за промовчанням :) (тестовано з 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) має можливість "Виділити невибрані комітети", що дозволяє зрозуміти, які комітети існують у галузі, а не інші.
Артуракай

Так, я просто використовував intellij, щоб вибірково скачувати навантаження змін, внесених через репо, "автоформатом при збереженні". Було дуже просто ... Довелося знайти варіант "Порівняти раніше з місцевим", щоб зробити це, хоча
Том Х,

1

Погляньте git show-branch

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

Одне наочне зображення, яке, здається, не вирішується, - це бачити коміти, які містять гілки (спільно чи однозначно).

Для цього візуального я великий фанат git show-branch; він розбиває добре організовану таблицю комітетів за галуззю назад до спільного предка. - щоб спробувати це на репо з декількома гілками з розбіжностями, просто введіть git show-branchі перевірте результат - для запису з прикладами, див. Порівняння комітетів між гілками Git


0

Ось як бачити візуальну різницю між цілими комітами, на відміну від одиничних файлів, у Visual Studio (протестовано у VS 2017). На жаль, він працює лише для комітетів у межах однієї гілки: У «Команді провідника» виберіть подання «Гілки», клацніть правою кнопкою миші на репо і виберіть «Переглянути історію», як на наступному зображенні.

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

Тоді історія нинішньої гілки з’являється в основній області. (Там, де гілки, які закінчились так, як раніше було зроблено фіксацію на поточній гілці, позначені мітками.) Тепер виберіть пару комітетів за допомогою Ctrl-Left, потім клацніть правою кнопкою миші та виберіть зі спливаючого меню пункт «Порівняти коміти ...».

Докладніше про порівняння гілок у світі Microsoft див. У цьому питанні stackoverflow: Відмінності між гілками git за допомогою Visual Studio .


1
Показує лише історію однієї гілки, тому не можна порівнювати між гілками.
Michał Fita

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.