Jak skonfigurować „dziennik git”, aby wyświetlał „datę zatwierdzenia”

127

Jak mogę skonfigurować git logwyświetlanie commit datezamiast author date?

Michael
źródło
25
@Colleen Z każdym zatwierdzeniem są powiązane dwie daty - AuthorDate i CommitDate ( git show --pretty=fuller HEADaby zobaczyć przykład). W przypadku rozwoju lokalnego są one zwykle takie same, ale w przypadku poprawek dodawanych za pośrednictwem poczty e-mail lub innych mechanizmów mogą się różnić, gdzie AuthorDate to data wygenerowania poprawki, a CommitDate to data, kiedy została faktycznie zastosowana w repozytorium.
twalberg

Odpowiedzi:

145

Istnieje kilka opcji, aby ładnie wydrukować datę. Prawdopodobnie najłatwiej jest po prostu użyć jednego z gotowych --prettyformatów, na przykład git log --pretty=fuller- to pokaże obie daty. Jeśli chcesz zobaczyć tylko jedną datę, ale ustaw ją jako datę zatwierdzenia, możesz użyć git log --format=<some stuff>. Wszystkie dopuszczalne kody definiujące format są udokumentowane w git help log. Commit data jest jednym z %cd, %cD, %cr, %ctlub %ci, w zależności od formatu wolisz go.

Jeśli jest to coś, co chcesz często robić, umieść to w aliasie lub napisz skrypt pomocniczy, aby zaoszczędzić na wpisywaniu.

twalberg
źródło
53

Możesz używać --pretty=formati używać %crdla daty zatwierdzenia względnej.

Na przykład:

$ git log --graph --pretty=format:'%C(auto)%h%d (%cr) %cn <%ce> %s'

Możesz zdefiniować alias w git, aby był łatwiejszy w użyciu. Mam w moim .gitconfig:

[alias]
# see `git help log` for detailed help.
#   %h: abbreviated commit hash
#   %d: ref names, like the --decorate option of git-log(1)
#   %cn: commiter name
#   %ce: committer email
#   %cr: committer date, relative
#   %ci: committer date, ISO 8601-like format
#   %an: author name
#   %ae: author email
#   %ar: author date, relative
#   %ai: author date, ISO 8601-like format
#   %s: subject
# my awesome git log replacement
lol  = log --graph --pretty=format:\"%C(auto)%h%d%Creset %C(cyan)(%cr)%Creset %C(green)%cn <%ce>%Creset %s\"
# same as above, but ISO date
lold = log --graph --pretty=format:\"%C(auto)%h%d%Creset %C(cyan)(%ci)%Creset %C(green)%cn <%ce>%Creset %s\"
# using build-in standards
lol2 = log --oneline --graph --decorate
# shows branches and their last commits
lol3 = log --all --graph --decorate --oneline --simplify-by-decoration

W systemie Linux lub podobnym możesz używać apostrofów 'zamiast cudzysłowów ":

[alias]
lol = log --graph --pretty=format:'%C(auto)%h%d%Creset %C(cyan)(%cr)%Creset %C(green)%cn <%ce>%Creset %s'

Dzięki temu po prostu uruchom git lollub inne warianty, aby zobaczyć ładny wynik.

Oto wynik git lol --simplify-by-decoration:

git lol wyjście

  • Wygląda dobrze. :)
  • loljest łatwiejsze do wpisania niż logi brzmi lepiej.
    • Daje również dostęp do zwykłego, git logjeśli kiedykolwiek będziesz go potrzebować.
  • Twoje oczy mogą szybko przeglądać zawartość za pomocą różnych kolorów.
  • Nazwy i e-maile są bardzo przydatne w przypadku dużych projektów / organizacji z wieloma współtwórcami.
  • Używanie domyślnego kolorowania dla hash / ref, ponieważ jest już całkiem dobre.

Oto wynik działania git loldz datami w formacie ISO. Przydatne, aby zobaczyć dokładną datę / godzinę dokonania zatwierdzenia, z dodatkową zaletą łatwego przeglądania strefy czasowej współtwórcy.

wprowadź opis obrazu tutaj

Edycja 2020-06 : Dodano zrzuty ekranu. Zaktualizowano do używania %C(auto)(automatyczne / domyślne kolorowanie) dla %h(skrót zatwierdzenia) i %d(nazwy referencyjne). Dodano %cn(imię i nazwisko osoby zarządzającej) oprócz wiadomości e-mail.

raychi
źródło
1
Otrzymuję błąd analizy: git log --graph --pretty=format:\"%C(yellow)%h%Creset%C(cyan)%C(bold)%d%Creset %C(cyan)(%cr)%Creset %C(green)%ce%Creset %s\" bash: błąd składni w pobliżu nieoczekiwanego tokenu `('
frakman1
2
@ frakman1 - musisz cofnąć ucieczkę z "s, aby powyższa linia działała w terminalu
stites
2
Poprawiona linia: git log --graph --pretty = format: "% C (żółty)% h% Creset% C (cyjan)% C (pogrubiony)% d% Creset% C (cyjan) (% cr)% Creset% C (zielony)% ce% Creset% s "
RedSands
1

Wolę ten format, nie zawiera nazwiska autora i zawiera aktualną datę zatwierdzenia.

git log --graph --pretty=format:"%C(yellow)%h%x09%Creset%C(cyan)%C(bold)%ad%Creset  %C(green)%Creset %s" --date=short
Patrick Steil
źródło