Kiedy uruchamiam „git pull”, często chcę wiedzieć, co zmieniło się między ostatnią wersją pliku a nową. Powiedz, że chcę wiedzieć, co ktoś inny zaangażował w określony plik.
Jak to się robi?
Zakładam, że jest to "git diff" z niektórymi parametrami dla zatwierdzenia x w porównaniu z zatwierdzeniem y, ale nie mogę uzyskać składni. Wydaje mi się również, że "git log" jest trochę mylący i nie jestem pewien, skąd wziąć identyfikator zmiany mojej najnowszej wersji pliku w porównaniu z nową.
Odpowiedzi:
Istnieje wiele wspaniałych sposobów określania zatwierdzeń - zobacz sekcję określania rewizji,
man git-rev-parse
aby uzyskać więcej informacji. W takim przypadku prawdopodobnie chcesz:Te
@{1}
środki „poprzednia pozycja ref Mam określonym” tak, że ma wartość co sprawdził się wcześniej - tuż przed pociągnięciem. Możesz dodaćHEAD
tam koniec, jeśli masz również jakieś zmiany w swoim drzewie roboczym i nie chcesz widzieć ich różnic.Nie jestem pewien, o co prosisz z „identyfikatorem zatwierdzenia mojej najnowszej wersji pliku” - zatwierdzenie „ID” (skrót SHA1) to 40-znakowy znak szesnastkowy na górze każdego wpisu w wyniku z git log. To hash dla całego zatwierdzenia, a nie dla danego pliku. Naprawdę nigdy nie potrzebujesz więcej - jeśli chcesz porównać tylko jeden plik w ciągu pull, zrób
To jest ogólna sprawa - jeśli chcesz wiedzieć o stanie pliku w danym zatwierdzeniu, określasz zatwierdzenie i plik, a nie identyfikator / hash specyficzny dla pliku.
źródło
@{1}
jako skrótuHEAD@{1}
)Lubię używać:
Lub jeśli chcę porównać tylko określony plik:
źródło
HEAD^
jest zobowiązaniem rodzica, a nie wcześniejszympull
HEAD
jest zatwierdzeniem scalającym,HEAD^
jest pierwszym zatwierdzeniem nadrzędnym, więc tak, może to być zatwierdzenie przedpull
. Aby uzyskać drugiego rodzica (dla scalenia dwukierunkowego), użyjHEAD^2
. Ale z drugiej strony powyższa odpowiedź nie jest tak naprawdę odpowiedzią na pytanie w pierwszej kolejności, więc pozostawiając -1 ;-)Jeśli wykonasz strita
git pull
, albo zostaniesz „przewinięty do przodu”, albo połączysz nieznaną liczbę zatwierdzeń ze zdalnego repozytorium. Dzieje się to jednak jako jedna akcja, więc ostatnie zatwierdzenie, w którym byłeś bezpośrednio przed ściągnięciem, będzie ostatnim wpisem w reflogu i będzie dostępne jakoHEAD@{1}
. Oznacza to, że możesz:Jednak zdecydowanie zalecałbym, aby jeśli jest to coś, co często robisz, powinieneś rozważyć wykonanie a
git fetch
i sprawdzenie pobranej gałęzi przed ręcznym scaleniem lub ponownym bazowaniem na niej. Np. Jeśli jesteś na master i zamierzasz przyciągnąć origin / master:źródło
git log
zamiastgit diff
tutaj (nawet jeśli składnia jest nieco niespójna między „..” dlagit log
i „…” dlagit diff
;) +1 Zobacz stackoverflow.com/questions/53569/… i stackoverflow.com/questions / 850607 /…