Я думал, что этот вопрос (из заголовка) может быть связан с использованием git diff для двух файлов, которые не обязательно находятся в репо. Я обнаружил, что для этого предназначен флаг --no-index, например git diff --no-index --word-diff old_file.txt new_file.txt(--word-diff выделяет изменения по слову, а не только по строке, что очень полезно для длинного текста).
Пэт
Ответы:
139
Укажите пути явно:
git diff HEAD:full/path/to/foo full/path/to/bar
Ознакомьтесь с --find-renamesопцией в git-diffдокументации .
Я хочу упомянуть, что вы можете сравнивать любые два файла, git diff <path> <path>даже если они не находятся в репозитории git.
митенка
1
@mitenka Не думаю, что это правильно. Если вы посмотрите, git diff --helpто увидите, что для двух файлов поддерживаются только шаблоны git diff [<options>] --no-index [--] <path> <path>. git diff a bсоответствует только шаблонам фиксации, а не файлам.
Дуг
@Doug Вот цитата из упомянутой вами справочной команды git-scm.com/docs/git-diff : Показать [...] изменения между двумя файлами на диске.
митенка
@mitenka в справке сказано, что если вы не используете '--no-index', он не сравнивает файлы; ваш комментарий должен быть отдельным ответом; это неправда и не имеет отношения к этому ответу.
Дуг
1
@Doug Спасибо за ваше мнение. Вот цитата из справки, на которую вы ссылаетесь: Вы можете опустить эту --no-indexопцию при запуске команды в рабочем дереве, управляемом Git, и хотя бы один из путей указывает за пределами рабочего дерева, или при запуске команды вне рабочего дерева, управляемого Git .
митенка
81
Я считаю, что использование --no-index- это то, что вы ищете:
git diff [<options>]--no-index [--]<path><path>
как указано в руководстве git:
Эта форма предназначена для сравнения двух указанных путей в файловой системе. Вы можете
опустить этот --no-indexпараметр при запуске команды в рабочем дереве, управляемом Git, и хотя бы один из путей указывает за пределами рабочего дерева, или при выполнении команды за пределами рабочего дерева, управляемого Git.
@swe, это определенно полезный ответ, но OP конкретно указал, что файл находится в HEAD, что означает, что он находится в индексе git. Принятый ответ напрямую касается вопроса. Также принятый ответ имел фору на 6 лет;)
Майкл Дельгадо
3
Возможно, это не помогло OP, но это было именно то, что я искал.
thislooksfun
1
Это ответ на вопрос, заданный заголовком, если вы уклонились от этого в Интернете.
Мерлин
Спасибо, что ответили на заголовок ... поэтому я пришел сюда.
grek40,
Я рада, что это помогло.
mh sattarian,
3
Если вы используете tortoise git, вы можете щелкнуть правой кнопкой мыши по файлу и git diff: щелкнув правой кнопкой мыши по первому файлу и через подменю tortoisegit выберите «Diff Later». Затем вы можете щелкнуть правой кнопкой мыши второй файл. , перейдите в подменю tortoisegit и выберите "Различить с вашим именем файлаhere.txt"
Используя PhpStorm, я просто копирую код предыдущей фиксации и сравниваю его с текущей версией, используя встроенный инструмент «сравнить с буфером обмена».
PhpStorm - это коммерческая IDE. Этот вопрос касается того, как это сделать в самом git cli, без предположения о дополнительном программном обеспечении.
git diff --no-index --word-diff old_file.txt new_file.txt
(--word-diff выделяет изменения по слову, а не только по строке, что очень полезно для длинного текста).Ответы:
Укажите пути явно:
git diff HEAD:full/path/to/foo full/path/to/bar
Ознакомьтесь с
--find-renames
опцией вgit-diff
документации .Кредит: twaggs .
источник
git diff <path> <path>
даже если они не находятся в репозитории git.git diff --help
то увидите, что для двух файлов поддерживаются только шаблоныgit diff [<options>] --no-index [--] <path> <path>
.git diff a b
соответствует только шаблонам фиксации, а не файлам.--no-index
опцию при запуске команды в рабочем дереве, управляемом Git, и хотя бы один из путей указывает за пределами рабочего дерева, или при запуске команды вне рабочего дерева, управляемого Git .Я считаю, что использование
--no-index
- это то, что вы ищете:как указано в руководстве git:
источник
Если вы используете tortoise git, вы можете щелкнуть правой кнопкой мыши по файлу и git diff: щелкнув правой кнопкой мыши по первому файлу и через подменю tortoisegit выберите «Diff Later». Затем вы можете щелкнуть правой кнопкой мыши второй файл. , перейдите в подменю tortoisegit и выберите "Различить с вашим именем файлаhere.txt"
источник
Используя PhpStorm, я просто копирую код предыдущей фиксации и сравниваю его с текущей версией, используя встроенный инструмент «сравнить с буфером обмена».
источник