git diff między dwoma różnymi plikami


112

W HEAD(najnowszym zatwierdzeniu) mam plik o nazwie foo. W moim obecnym drzewie roboczym zmieniłem jego nazwę na bar, a także dokonałem edycji.

Chcę git diff foosię HEAD, a barw moim obecnym drzewie roboczym.


65
Pomyślałem, że to pytanie (z tytułu) może dotyczyć użycia git diff na dwóch plikach, które niekoniecznie znajdują się w repozytorium. Zauważyłem, że służy do tego flaga --no-index, np. git diff --no-index --word-diff old_file.txt new_file.txt(--Word-diff podkreśla zmiany według słowa, a nie tylko wiersza, co jest bardzo pomocne w przypadku długiego tekstu).
Pat

Odpowiedzi:


139

Podaj ścieżki jawnie:

git diff HEAD:full/path/to/foo full/path/to/bar

Sprawdź --find-renamesopcję w git-diff dokumentach .

Kredyt: twaggs .


10
Chcę wspomnieć, że możesz porównać dowolne dwa pliki używając, git diff <path> <path>nawet jeśli nie znajdują się w repozytorium git.
mitenka

1
@mitenka Nie sądzę, że to prawda. Jeśli spojrzysz na git diff --help, zobaczysz, że jedyne wzorce obsługiwane dla dwóch plików to git diff [<options>] --no-index [--] <path> <path>. git diff a bdopasowuje tylko wzorce zatwierdzeń, a nie pliki.
Doug

@Doug Oto cytat z polecenia pomocy, o którym wspomniałeś, git-scm.com/docs/git-diff : Pokaż zmiany [...] między dwoma plikami na dysku.
mitenka

@mitenka pomoc mówi, jeśli nie używasz '--no-index', nie porównuje plików; twój komentarz powinien być osobną odpowiedzią; to nieprawda i nie dotyczy tej odpowiedzi.
Doug

1
@Doug Dziękuję za twoją opinię. Oto cytat z pomocy, do której się odwołujesz: Możesz pominąć tę --no-indexopcję, uruchamiając polecenie w drzewie roboczym kontrolowanym przez Gita i co najmniej jedna ze ścieżek wskazuje poza drzewem roboczym lub podczas uruchamiania polecenia poza drzewem roboczym kontrolowanym przez Gita .
mitenka

81

Uważam, że używanie --no-indexjest tym, czego szukasz:

git diff [<options>] --no-index [--] <path> <path>

jak wspomniano w podręczniku git:

Ta forma służy do porównania podanych dwóch ścieżek w systemie plików. Możesz pominąć--no-indexopcję, uruchamiając polecenie w drzewie roboczym kontrolowanym przez Gita, a przynajmniej jedna ze ścieżek wskazuje poza drzewem roboczym lub podczas uruchamiania polecenia poza drzewem roboczym kontrolowanym przez Git.


1
@swe to zdecydowanie przydatna odpowiedź, ale OP wyraźnie stwierdził, że plik jest w HEAD, co oznacza, że ​​znajduje się w indeksie git. Zaakceptowana odpowiedź bezpośrednio odnosi się do pytania. Również zaakceptowana odpowiedź miała 6 lat
Michael Delgado

3
Może to nie pomogło OP, ale właśnie tego szukałem.
thislooksfun

1
To odpowiada na pytanie zamieszczone w tytule, jeśli unikałeś tego w Internecie.
Merlin

Dzięki za odpowiedź w tytule ... dlatego tu przyjechałem.
grek40

Cieszę się, że to pomogło.
mh sattarian

3

Jeśli używasz narzędzia Tortoise Git, możesz kliknąć plik prawym przyciskiem myszy i uzyskać różnicę przez: Kliknięcie prawym przyciskiem myszy na pierwszym pliku i poprzez podmenu tortoisegit wybierz opcję "Porównaj później" Następnie na drugim pliku możesz również kliknąć prawym przyciskiem myszy , przejdź do podmenu tortoisegit, a następnie wybierz „Porównaj z twoją nazwą pliku.txt”


-12

Używając PhpStorm, po prostu kopiuję kod poprzedniej zmiany i porównuję go z aktualną wersją za pomocą wbudowanego narzędzia "porównaj ze schowkiem".


5
PhpStorm to komercyjne IDE. To pytanie dotyczy tego, jak to zrobić w samym git cli, bez domniemania dodatkowego oprogramowania.
Charles Taylor
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.