Я переместил файл, используя 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 достаточно умен, чтобы сравнить правильные файлы/содержимое (то есть исходное содержимое перед переименованием с измененным содержимым после переименования)