Jak w Git mogę porównać ten sam plik między dwoma różnymi zatwierdzeniami (nieprzylegającymi) w tej samej gałęzi (na przykład master)?
Szukam funkcji porównania, takiej jak Visual SourceSafe (VSS) lub Team Foundation Server (TFS).
Czy jest to możliwe w Git?
..
jest to naprawdę konieczne, ale będzie z nim współpracowało (może z wyjątkiem dość starych wersji). Możesz także użyćgit log
lubgitk
znaleźć SHA1 do użycia, jeśli dwa zatwierdzenia są bardzo daleko od siebie.gitk
w menu kontekstowym ma również opcję „diff selected -> this” i „diff this -> selected”.--
to przydatne np. gdy masz plik o nazwie-p
. Dobry do użycia w skryptach, tylko w rzadkich przypadkach potrzebnych w praktyce.Możesz także porównać dwa różne pliki w dwóch różnych wersjach, takich jak to:
git diff <revision_1>:<file_1> <revision_2>:<file_2>
źródło
<file_1>
i<file_2>
znajduje się w bieżącym katalogu, a nie w katalogu zarządzanym git najwyższego poziomu, należy dodać./
na Unixie:<revision_1>:./filename_1
Jeśli skonfigurowałeś „difftool”, możesz użyć
Przykład: porównanie pliku z ostatniego zatwierdzenia do poprzedniego zatwierdzenia w tym samym oddziale: Zakładając, że jeśli jesteś w folderze głównym projektu
Powinieneś mieć następujące wpisy w pliku ~ / .gitconfig lub w projekcie / .git / config. Zainstaluj p4merge [To jest moje ulubione narzędzie do porównywania i scalania]
źródło
Sprawdź
$ git log
, skopiuj identyfikator SHA-1 dwóch różnych zatwierdzeń i uruchomgit diff
polecenie z tymi identyfikatorami. na przykład:źródło
git diff (sha-id-one) (sha-id-two) -- filename.ext
bez nazwy pliku wyświetli listę różnic wszystkich plików w tych dwóch zatwierdzeniach.Jeśli chcesz zobaczyć wszystkie zmiany w pliku między dwoma zatwierdzeniami na zasadzie zatwierdzania przez zatwierdzenie, możesz to zrobić
git log -u $start_commit..$end_commit -- path/to/file
źródło
Oto skrypt Perla, który wypisuje polecenia Git diff dla danego pliku znalezione w poleceniu Git log.
Na przykład
Wydajność:
które można następnie wyciąć i wkleić w sesji okna powłoki lub przesłać do potoku
/bin/sh
.Uwagi:
Kod:
źródło
Jeśli chcesz zrobić różnicę za pomocą więcej niż jednego pliku, metodą określoną przez @mipadi:
Np. Różnicuj między
HEAD
swoim amaster
, aby znaleźć wszystkie.coffee
pliki:Spowoduje to rekurencyjne przeszukiwanie
your_search_folder/
wszystkich.coffee
plików i różnicę między nimi a ichmaster
wersjami.źródło
Jeśli masz kilka plików lub katalogów i chcesz porównać nieciągłe zatwierdzenia, możesz to zrobić:
Utwórz gałąź tymczasową ( w tym przykładzie „wersja” )
Przewiń do pierwszego celu zatwierdzenia
Wiśniowe wybieranie tych, którzy są zainteresowani
Zastosuj diff
Kiedy skończysz
źródło
To kolejny sposób na wykorzystanie niesamowitości Gita ...
źródło
difftool-file = "!git difftool HEAD@{\"$2\"} HEAD \"$1\" #"
Jeśli chcesz proste wizualne porównanie w systemie Windows, takie jak Visual SourceSafe lub Team Foundation Server (TFS), spróbuj tego:
Uwaga: po uaktualnieniu do systemu Windows 10 straciłem opcje menu kontekstowego Git. Możesz jednak osiągnąć to samo, używając „gitk” lub „gitk filename” w oknie poleceń.
Po wywołaniu „Git History” uruchomi się narzędzie Git GUI z historią pliku w lewym górnym panelu. Wybierz jedną z wersji, którą chcesz porównać. Następnie kliknij drugą wersję prawym przyciskiem myszy i wybierz jedną z nich
Zróżnicuj to -> wybrane
lub
Zróżnicowane wybrane -> to
Różnice oznaczone kolorami pojawią się w dolnym lewym panelu.
źródło