git diff два файли на одній гілці, та сама фіксація


97

Вибачте, якщо це питання існує, я на диво не зміг його знайти: /

Як я можу виконати git diffміж двома файлами в одній гілці та одному коміті?

тобто git diff fileA.php fileB.php

(в ідеалі з легким для читання кольоровим кодуванням, що gitпропонує .... або подібне до того, що робить програма BeyondCompare!)


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

Відповіді:


84

Для цього вам не потрібен git, просто використовуйте diff fileA.php fileB.php(або vimdiff, якщо ви хочете поряд із порівнянням)


22
vimdiffза перемогу! Дякую!
d -_- b

24
Це може працювати, але це не git diff. Це зовсім інший вихідний формат.
даборосс

11
Це не відповідає на початкове запитання
DylanYoung

8
Я не погоджуюся, що ОП не було зрозумілим, але той факт, що він згадує BeyondCompare, означає, що він спеціально не шукає, git diffа просто читає розбіжність. Також той факт, що він прийняв мою відповідь як те, що він шукав, також вказує на те, що вона насправді відповідає на неї.
JaredMcAteer

3
уважно прочитайте відповідь. команди diff fileA fileBнемаєgit diff fileA fileB
Метью Гінея

247

Якщо ви хочете використовувати git diffна двох довільних файлах, ви можете використовувати git diff --no-index <file_a> <file_b>. Два файли не потрібно відслідковувати, gitщоб це працювало.


32
+1, як він відповідає на первісне запитання (незалежно від того, "чому б ти це зробив" ... можуть бути причини)
NobodysNightmare

19
--word-diffвиділяє зміни словом, а не лише рядком
user3148949

2
Для тих, хто використовує PowerShell, це набагато простіший спосіб отримати різну кількість двох файлів у репо.
Джей Соєр

2
Як ця відмінна відповідь перерахована нижче 2 раніше, меншою кількістю голосів (і менш корисною) відповідей під час сортування за "активними" ??? Я навіть не вважаю відповідь, позначену правильною. У будь-якому випадку, дякую!
j_random_hacker

@daboross В GNU diffutils 3.4+ (2016-08-08), diffмає --color, що може допомогти (див. unix.stackexchange.com/a/338960 ). Але навіть тоді, якщо використовується diff-so-fancy, схоже, потрібен конкретний вихідний формат git diff. diff -u(див. stackoverflow.com/a/4857407/10095231 ) не працює.
кельвін

14

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

git diff <revision_1>:<file_1> <revision_2>:<file_2>

як зазначено тут: https://stackoverflow.com/a/3343506/1815446

У вашому випадку (вказавши однакову редакцію для обох файлів):

git diff <revisionX>:fileA.php <revisionX>:fileB.php

Примітка. Перегляд може бути HEAD~2, SHA-1, назва філії тощо
ma11hew28

Це працювало для мене, просто порівнюючи імена файлів з двох різних каталогів: git diff --name-only HEAD:dir1 HEAD:dir1_backup працює після git addобох каталогів.
Френк Форте

1
Це працює, якщо редакція не перевірена в робоче дерево, або файли робочого дерева модифіковані і хочеться відрізняти оригінали, або якщо робочого дерева взагалі немає, як у голому репо-релізі. Прикро, що на це високо оцінене запитання є високо оцінені відповіді, які відповідають на все ще корисне, але зовсім інше питання "як я можу отримати git-diff як вихід без використання git?"
TrentP

4

Щоб регулярний gnu diff виглядав як git diff, я рекомендую такі параметри:

diff -burN file_or_dir1 file_or_dir2

(де -bігноруйте пробіли, -uуніфікований диференційний, -rрекурсивний, -Nтрактуйте відсутні файли як /dev/null).

Він чудово працює, але все ще не має кольорів, і автоматична підкачка в стилі git практично відсутня. Якщо ви хочете виправити обидва варіанти (я це роблю), встановіть colordiffі використовуйте це так:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

Це дає вихід та інтерфейс, дуже близький до фактичного git diff.


4
-1 , тому що "ви не можете" невірно (див: stackoverflow.com/a/13965200/968531 )
NobodysNightmare

Видаліть "ви не можете", додайте інструкції щодо встановлення colordiff, і це може бути гарною відповіддю на початкове запитання.
DylanYoung


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