git відрізняється між двома різними файлами


111

У HEAD(останньому комітеті) у мене є файл з іменем foo. У своєму нинішньому робочому дереві я перейменував його на barі також відредагував.

Я хочу , щоб git diff fooв HEADі barв моєму поточному робочому дереві.


64
Я подумав, що це питання (з назви) може стосуватися використання git diff для двох файлів, які не обов'язково є репо. Я виявив, що прапором --no-index є саме це, наприклад git diff --no-index --word-diff old_file.txt new_file.txt(--word-diff виділяє зміни словом, а не просто рядком, що дуже корисно для довгого тексту).
Пат

Відповіді:


135

Вкажіть шляхи прямо:

git diff HEAD:full/path/to/foo full/path/to/bar

Перевірте --find-renamesпараметр у git-diff документах .

Кредит: twaggs .


9
Хочу зазначити, що ви могли порівняти будь-які два файли, використовуючи, git diff <path> <path>навіть якщо вони не знаходяться у сховищі git.
mitenka

1
@mitenka Я не думаю, що це правильно. Якщо ви подивитесь, git diff --helpви побачите, що єдиними моделями, які підтримуються для двох файлів, є git diff [<options>] --no-index [--] <path> <path>. git diff a bлише збіги фіксують шаблони, не файли
Даг

@Doug Ось цитата з довідкової команди, яку ви згадали, git-scm.com/docs/git-diff : Показати [...] зміни між двома файлами на диску.
mitenka

@mitenka говорить в довідці, якщо ви не використовуєте "--no-index", він не порівнює файли; ваш коментар має бути окремою відповіддю; це неправда і ця відповідь не має відношення.
Дуг

1
@Doug Дякую за вашу думку Ось цитата з довідки, на яку ви посилаєтесь: Ви можете опустити --no-indexпараметр під час виконання команди в робочому дереві, керованому Git, і принаймні в одній із точок шляхів поза робочим деревом або при запуску команди поза робочим деревом, контрольованим Git .
mitenka

78

Я вважаю --no-index, що ви шукаєте:

git diff [<options>] --no-index [--] <path> <path>

як зазначено в посібнику з git:

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


1
@swe це, безумовно, корисна відповідь, але в ОП спеціально зазначено, що файл знаходиться в HEAD, це означає, що він знаходиться в git індексі. Прийнята відповідь безпосередньо стосується питання. Також прийнята відповідь мала 6-річний початок;)
Майкл Дельгадо

3
Це, можливо, не допомогло ОП, але це було саме те, що я шукав.
thislooksfun

Це дає відповідь на запитання, розміщене в заголовку, якщо ви просили цього в Інтернеті.
Мерлін

3

Якщо ви використовуєте черепаховий git, ви можете клацнути правою клавішею миші на файл і git a diff за допомогою: Клацніть правою кнопкою миші на першому файлі та через підменю tortoisegit виберіть "Diff later". Потім у другому файлі ви також можете клацнути правою кнопкою миші на цьому , перейдіть до підменю tortoisegit і виберіть "Розрізняти своє ім'я файлу.txt"


-12

Використовуючи PhpStorm, я просто копіюю попередній код фіксації та порівнюю його з поточною версією, використовуючи вбудований інструмент "порівняти з буфером обміну".


5
PhpStorm - комерційний IDE. Це питання стосується того, як це зробити в межах самого git cli, без презумпції додаткового програмного забезпечення.
Чарльз Тейлор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.