Я переместил файл, используя git mv. Теперь я хотел бы сделать diff для нового файла, чтобы сравнить его со старым файлом (со старым, теперь несуществующим именем).
Как это сделать?
Я переместил файл, используя git mv. Теперь я хотел бы сделать diff для нового файла, чтобы сравнить его со старым файлом (со старым, теперь несуществующим именем).
Как это сделать?
Вам нужно использовать -M, чтобы git автоматически обнаруживать перемещенный файл, когда он отличается. Использование только git diff, поскольку упомянутый knittl не работает для меня.
Так просто: git diff -M должен это сделать.
Документация для этого коммутатора:
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the similarity index
(i.e. amount of addition/deletions compared to the file’s size). For example,
-M90% means git should consider a delete/add pair to be a rename if more than
90% of the file hasn’t changed.
В дополнение к тому, что написал knittl, вы всегда можете использовать:
git diff HEAD:./oldfilename newfilename
где HEAD:./oldfilename означает oldfilename в последнем фиксации (в HEAD) относительно текущего каталога.
Если у вас недостаточно новых git, вам нужно будет использовать вместо этого:
git diff HEAD:path/to/oldfilename newfilename
С git 2.9 (июнь 2016 года) вам больше не нужно будет добавлять -M. git diff по умолчанию использует -M.
Смотрите commit 5404c11, совершить 9501d19, совершить a9276a6, совершить f07fc9e, совершить 62df1e6 (25 февраля 2016 г.) Matthieu Moy (moy).
(слияние Junio C Hamano - gitster - в совершить 5d2a30d, 03 апреля 2016)
diff: активироватьdiff.renamesпо умолчаниюОбнаружение переименования - очень удобная функция, и новые пользователи не должны вам нужно вникнуть в документацию, чтобы извлечь из этого выгоду.
Потенциальные возражения против активации обнаружения переименования заключаются в том, что он иногда терпят неудачу, и это иногда медленно. Но обнаружение переименования уже активирован по умолчанию в нескольких случаях, таких как "
git status" и "git merge", поэтому активацияdiff.renamesпринципиально не изменяет ситуация. Когда обнаружение переименования выходит из строя, оно теперь не выполняется последовательно между "git diff" и "git status".Этот параметр не влияет на команды сантехники, поэтому хорошо написан сценарии не будут затронуты.
По какой-либо причине использование HEAD:./oldfilename (или абсолютного пути) не работает для меня, но HEAD:oldfilename сделал (спасибо cmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
НТН
просто запустите git diff без каких-либо аргументов или git diff -- newfilename. git достаточно умен, чтобы сравнить правильные файлы/содержимое (то есть исходное содержимое перед переименованием с измененным содержимым после переименования)