Chcę znaleźć najnowsze zatwierdzenie, które zmodyfikowało plik źródłowy.
Mogę użyć, git blame
aby zobaczyć wszystkie daty zatwierdzeń w każdym wierszu, ale trudno jest dokładnie zobaczyć, który commit jako ostatni dotknął pliku.
Jak mogę znaleźć ostatnie zatwierdzenie, które dotknęło danego pliku w moim repozytorium git?
--all
opcję.Jeśli chcesz tylko znaleźć najnowsze zatwierdzenie, to nie chcesz
git-log
, chceszgit-rev-list
, które zawiera listę obiektów zatwierdzeń zmieniających ten plik, w tej ścieżce zatwierdzenia, zaczynając od najnowszego (chronologicznie). Mówiąc najprościej:git rev-list -1 <commit> <filename>
W
git-rev-list
twoim przypadku wystarczy podać:To po prostu zwraca ostatni identyfikator zatwierdzenia w bieżącej gałęzi, aby zmienić ten plik, np:
215095e2e338525be0baeeebdf66bfbb304e7270
Aby uzyskać bardziej złożony przykład, możesz użyć nazw tagów, a nawet zdalnych odwołań, i dołączyć względne nazwy ścieżek z symbolami wieloznacznymi, na przykład:
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
... Który powiedziałby ci, jaka była ostatnia zmiana w dopasowaniu symboli wieloznacznych w historii tej gałęzi. Opcje listy obrotów są ekstremalne, jest to jedno z najważniejszych poleceń hydraulicznych, więc możesz uwzględnić lub wykluczyć dowolne kryteria, jakie możesz sobie wyobrazić.
Oczywiście zajrzyj na stronę podręcznika git-rev-list (1) .
źródło
git-log
jest gorsze.git-log
to porcelana,git-rev-list
hydraulika.Jeśli chcesz po prostu uzyskać hash ostatniego zatwierdzenia, aby zmodyfikować określony zestaw plików (i chcesz tego uniknąć
awk
), możesz użyć:Może to być przydatne do uzyskania skrótu zatwierdzenia do późniejszego użycia z
git describe
.Na przykład (jeśli jest to przydatne dla każdego)…
Tworzę identyfikator bieżącej wersji, biorąc pod uwagę ostatnie zatwierdzenie zmiany dowolnego pliku źródłowego (zakładając, że oznaczasz wersje tagami takimi jak
mycode-1.2.1
):Daje to identyfikatory takie jak:
mycode-1.2.1
- kiedy aktualny stan plików źródłowych odpowiada wersji oznaczonejmycode-1.2.1-g3k7s2
- kiedy aktualny stan plików źródłowych odpowiada zatwierdzeniu po oznaczonej wersjimycode-1.2.1-g3k7s2-mod
- gdy aktualny stan plików źródłowych został zmodyfikowany od ostatniego zatwierdzenia następującego po oznaczonej wersjimycode-unknown
- gdy nie został jeszcze utworzony tag wersjiźródło
$VN
wygląda jak jakiś koszmar nieumarłych SVNNie jestem pewien, czy tego chcesz, ale jeśli zrobisz,
git log <thefile>
aby uzyskać zatwierdzenia, które zmieniły ten plik. Możesz wybrać najwyższy. Powinien to być ten, którego szukasz.źródło
git log -n1 -- <thefile>
(lub przelać wyjściehead -1
, jeśli chcesz marnować zasobów) nie trzeba ręcznie wybrać linię górną (patrz Jo Liss za odpowiedź )-n
i użyć-1
bezpośrednio.Aby uzyskać tylko ref w jednej linii, spróbuj:
źródło
Kiedy już masz identyfikator SHA zatwierdzenia, którego chcesz używać
git log FILENAME
, powinieneś być w staniegit show SHA_ID_HERE
zobaczyć, co zrobiłeś dla tego konkretnego zatwierdzenia. Nie musisz nawet wpisywać całego identyfikatora; pierwszych 6 znaków powinno wystarczyć.źródło
git show $(git log -1 --pretty="%H" -- FILENAME)