Przeniosłem plik za pomocą git mv
. Teraz chciałbym zrobić różnicę na nowym pliku, aby porównać go ze starym plikiem (ze starą, już nieistniejącą nazwą).
Jak mam to zrobic?
git
diff
file-rename
mv
dr jerry
źródło
źródło
git diff -- yourRenamedFile
. Zobacz moją odpowiedź poniżejOdpowiedzi:
Musisz użyć -M, aby umożliwić gitowi automatyczne wykrycie przeniesionego pliku podczas porównywania. Używanie tak,
git diff
jak wspomniano knittl, nie działa dla mnie.Po prostu:
git diff -M
powinien to zrobić.Dokumentacja tego przełącznika to:
źródło
~/.gitconfig
?git diff
. Uruchomieniegit diff -M
na jednym pliku (o zmienionej nazwie) nie zgłasza zmiany nazwy.git log --follow -- file_after_move.txt
działa dobrze. Pokazuje całą historię, także przed przeprowadzką. Jakieś pomysły? Biegnęgit version 2.11.0.windows.1
.-C
Możliwość wykrywania kopii jest użyteczne i podobne. Użyłem go-M
do przeglądania pliku różnicowego, w którym refaktoryzowałem jeden plik na dwa (bez nazwy pasującej do oryginału).Oprócz tego, co napisał knittl , zawsze możesz użyć:
gdzie
HEAD:./oldfilename
oznacza starą nazwę pliku w ostatnim zatwierdzeniu (w HEAD), względem bieżącego katalogu.Jeśli nie masz wystarczająco nowego gita, musisz zamiast tego użyć:
źródło
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
do katalogu nie dodajesz--
przedcommit:path
parą. Git wydaje się być bardzo wybredny w kwestii składni.<commit-ish>:<pathname>
Składnia to identyfikator obiektu, coś Git-ish; po tym, jak--
Git oczekuje tylko nazw plików.Dzięki git 2.9 (czerwiec 2016) nie będziesz już musiał dodawać
-M
.git diff
używa-M
domyślnie.Zobacz zatwierdzenie 5404c11 , zatwierdzenie 9501d19 , zatwierdzenie a9276a6 , zatwierdzenie f07fc9e , zatwierdzenie 62df1e6 (25 lutego 2016) autorstwa Matthieu Moy (
moy
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu 5d2a30d , 03 kwietnia 2016)Nowe testy tej funkcji są tutaj .
źródło
git diff -M
aktywuje wykrywanie zmiany nazwy, jak powiedzieli inni (i jak zauważył @VonC, jest domyślnie aktywowany od git 2.9). Ale jeśli masz duży zestaw zmian, wykrywanie niedokładnych zmian nazwy może nadal zostać wyłączone. Git wyświetli ostrzeżenie podobne do poniższego, które łatwo przeoczyć pośród przeglądanych różnic:W takim przypadku ustaw opcję konfiguracyjną tak, jak sugeruje na przykład git
i ponownie uruchom polecenie diff.
źródło
Z jakiegoś powodu użycie
HEAD:./oldfilename
(lub ścieżki absolutnej) nie zadziałało dla mnie, ale zadziałałoHEAD:oldfilename
(dzięki cmn):HTH
źródło
HEAD:./oldfilename
?po prostu uruchom
git diff
bez żadnych argumentów lubgit diff -- newfilename
. git jest wystarczająco inteligentny, aby porównać właściwe pliki / treści (tj. oryginalną zawartość przed zmianą nazwy ze zmienioną treścią po zmianie nazwy)źródło
git mv
sprawdzenie pojedynczego pliku, a następnie porównanie stanu pomostowego z inną identyczną gałęzią spowoduje powstanie różnicy „wszystko zostało usunięte i odtworzone”, chyba że-M
zostanie użyta.