Yanıtlar:
Git'in farklılaşırken taşınan dosyayı otomatik olarak algılamasına izin vermek için -M kullanmanız gerekir. Sadece kullanarakgit diff
Knittl'in bahsettiği gibi benim için işe yaramıyor.
Yani basitçe: git diff -M
yapmalı.
Bu anahtarın dokümantasyonu:
-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.
~/.gitconfig
?
git diff
. git diff -M
Tek bir (yeniden adlandırılmış) dosyada çalıştırıldığında , yeniden adlandırma bildirilmez.
git log --follow -- file_after_move.txt
iyi çalışıyor. Taşınmadan önce de dahil olmak üzere tüm geçmişi gösterir. Herhangi bir fikir? Ben koşuyorum git version 2.11.0.windows.1
.
-C
Kopya tespit etmek için bir seçenek kullanışlı ve benzer. -M
Bir dosyayı ikiye yeniden düzenlediğim bir farka bakmak için kullandım (her iki isim de orijinalle eşleşmiyor).
Knittl'in yazdıklarına ek olarak , her zaman kullanabilirsiniz:
git diff HEAD:./oldfilename newfilename
burada HEAD:./oldfilename
, geçerli dizine göre son işlemede (HEAD'de) eski dosya adı anlamına gelir.
Yeterince yeni git yoksa, bunun yerine kullanmanız gerekir:
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
, dizine girerseniz --
ve commit:path
çiftten önce eklemezseniz , benim için çalışır . Git burada sözdizimi konusunda çok seçici görünüyor.
<commit-ish>:<pathname>
Sözdizimi bir nesne tanımlayıcıdır, bir şey Git-ish; --
Git yalnızca dosya adlarını bekledikten sonra .
Git 2.9 (Haziran 2016) ile -M
artık eklemeniz gerekmeyecek . varsayılan olarak git diff
kullanır -M
.
Bkz. Commit 5404c11 , commit 9501d19 , commit a9276a6 , commit f07fc9e , commit 62df1e6 (25 Şubat 2016) by Matthieu Moy ( moy
) .
(Tarafından Birleştirilmiş - Junio C Hamano gitster
- içinde 5d2a30d taahhüt 2016, 03 Apr)
diff
:diff.renames
varsayılan olarak etkinleştirYeniden adlandırma tespiti çok kullanışlı bir özelliktir ve yeni kullanıcıların bundan yararlanmak için dokümantasyonu incelemesine gerek yoktur.
Yeniden adlandırma algılamasını etkinleştirmeye yönelik olası itirazlar, bazen başarısız olması ve bazen yavaş olmasıdır. Ancak yeniden adlandırma tespiti, "
git status
" ve "git merge
" gibi bazı durumlarda varsayılan olarak zaten etkinleştirilmiştir , bu nedenle etkinleştirmediff.renames
, durumu temelden değiştirmez. Yeniden adlandırma tespiti başarısız olduğunda, artık "git diff
" ve "git status
" arasında sürekli olarak başarısız oluyor .Bu ayar sıhhi tesisat komutlarını etkilemez, bu nedenle iyi yazılmış komut dosyaları etkilenmeyecektir.
git diff -M
Başkalarının söylediği gibi yeniden adlandırma algılamasını etkinleştirir (ve @VonC'nin işaret ettiği gibi, varsayılan olarak git 2.9'dan etkinleştirilir). Ancak büyük bir değişiklik kümeniz varsa, hatalı yeniden adlandırma algılaması yine de kapatılabilir. Git, aşağıdaki gibi bir uyarı gösterecektir ve bu, görüntülediğiniz farkın ortasında gözden kaçması kolaydır:
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.
Bu durumda, yapılandırma seçeneğini git tarafından önerilen şekilde ayarlayın, örneğin
git config diff.renamelimit 450
ve diff komutunuzu yeniden çalıştırın.
Hangi nedenle olursa olsun HEAD:./oldfilename
(veya mutlak yol) kullanmak benim için işe yaramadı, ancak işe HEAD:oldfilename
yaradı (teşekkürler cmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
HEAD:./oldfilename
?
basitçe git diff
herhangi bir argüman olmadan çalıştırın veya git diff -- newfilename
. git, doğru dosyaları / içerikleri karşılaştıracak kadar akıllıdır (yani yeniden adlandırmadan önce orijinal içerik, yeniden adlandırdıktan sonra değiştirilmiş içerik)
git mv
tek bir dosya ve ardından aşamalı durumu, aksi halde aynı olan başka bir dalla karşılaştırmak -M
, kullanılmadığı sürece "her şey silindi ve yeniden oluşturuldu" diff üretecektir .
git diff -- yourRenamedFile
şey yeterli olacaktır. Aşağıdaki cevabımı