Я переместил файл, используя git mv
. Теперь я хотел бы провести различие в новом файле, чтобы сравнить его со старым файлом (со старым, а теперь несуществующим именем).
Как мне это сделать?
git
diff
file-rename
mv
доктор Джерри
источник
источник
git diff -- yourRenamedFile
будет достаточно. Смотрите мой ответ нижеОтветы:
Вам нужно использовать -M, чтобы git автоматически определял перемещенный файл при сравнении. Использование только
git diff
упомянутого knittl для меня не работает.Так просто:
git diff -M
должен это сделать.Документация для этого переключателя:
источник
~/.gitconfig
?git diff
. Запускgit diff -M
одного (переименованного) файла не сообщает о переименовании.git log --follow -- file_after_move.txt
работает хорошо. Показывает всю историю, в том числе до переезда. Любые идеи? Я бегуgit version 2.11.0.windows.1
.-C
Вариант для обнаружения копий является полезным и подобным. Я использовал его-M
для просмотра различий, в котором я реорганизовал один файл в два (ни одно имя не соответствовало оригиналу).Помимо того, что написал knittl , вы всегда можете использовать:
где
HEAD:./oldfilename
означает старое имя файла в последней фиксации (в HEAD) относительно текущего каталога.Если у вас недостаточно нового git, вам придется использовать вместо него:
источник
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
в каталог и не добавляете--
передcommit:path
парой. Здесь Git очень разборчив с синтаксисом.<commit-ish>:<pathname>
Синтаксис - это идентификатор объекта, что-то в стиле Git; после того, как--
Git ожидает только имена файлов.С git 2.9 (июнь 2016 г.) вам больше не придется добавлять
-M
.git diff
использует-M
по умолчанию.См. Коммит 5404c11 , фиксация 9501d19 , фиксация a9276a6 , фиксация f07fc9e , фиксация 62df1e6 (25 февраля 2016 г.) от Matthieu Moy (
moy
) .(Объединено Junio C Hamano -
gitster
- в фиксации 5d2a30d , 3 апреля 2016 г.)Новые тесты для этой функции здесь .
источник
git diff -M
активирует обнаружение переименования, как говорили другие (и, как указал @VonC, он активируется по умолчанию из git 2.9). Но если у вас большой набор изменений, возможно, снова отключится неточное определение переименования. Git отобразит предупреждение, подобное приведенному ниже, которое легко пропустить среди просматриваемых различий:В этом случае установите параметр конфигурации, как предлагает git, например
и повторно запустите вашу команду diff.
источник
По какой-то причине использование
HEAD:./oldfilename
(или абсолютный путь) у меня не сработало, но сработалоHEAD:oldfilename
(спасибо cmn):НТН
источник
HEAD:./oldfilename
?просто запустить
git diff
без аргументов, илиgit diff -- newfilename
. git достаточно умен, чтобы сравнивать правильные файлы / содержимое (т.е. исходное содержимое перед переименованием с измененным содержимым после переименования)источник
git mv
вставка одного файла и последующее сравнение поэтапного состояния с другой идентичной в остальном ветвью приведет к различию «все было удалено и воссоздано заново», если-M
оно не используется.