Jak wyświetlić wszystkie zatwierdzenia dla określonego dnia?

188

Przeglądałem już odpowiednie dokumenty z git-scm.com i gitref.org , ale nie mogę tego rozgryźć .

Powiedzmy, że chcę uzyskać wszystkie zatwierdzenia we wtorek, 12 listopada 2013 r. Korzystając z istniejącego repozytorium jako przykładu, wiem na pewno, że mam zatwierdzenia tego dnia, a także zatwierdza dzień przed i dzień później.

Z 2013-11-11i2013-11-12

Wszystkie poniższe informacje dają mi zobowiązania zarówno 11 listopada, jak i 12 listopada:

  • git log --after="2013-11-11" --until="2013-11-12"
  • git log --since="2013-11-11" --until="2013-11-12"
  • git log --after="2013-11-11" --before="2013-11-12"
  • git log --since="2013-11-11" --before="2013-11-12"

z 2013-11-12tylko

Wszystkie poniższe czynności nie dają mi żadnych zobowiązań:

  • git log --since="2013-11-12" --until="2013-11-12"
  • git log --since="2013-11-12" --before="2013-11-12"
  • git log --after="2013-11-12" --until="2013-11-12"
  • git log --after="2013-11-12" --before="2013-11-12"

Z 2013-11-12i2013-11-13

Zgodnie z oczekiwaniami (z wynikami 2013-11-11i 2013-11-12wyżej), wszystkie z poniższych dać mi wynika zarówno z 12 listopada i 13:

  • git log --since="2013-11-12" --before="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"
  • git log --since="2013-11-12" --until="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"

...i tak dalej i tak dalej. Czuję się jak Próbowałem wszystkich możliwych kombinacji since, after, before, a untiljednak nadal nie możesz znaleźć odpowiedzi, nie mogę zrozumieć, czy te opcje są włącznie lub wyłączne, ponieważ wydaje się być powszechna, czy dwie daty są różne, ale wyłączne, jeśli są tego samego dnia. Czy coś przeoczyłem / co robię źle ?!

3cheesewheel
źródło
8
Znalazłem git od / po / do / przed bardzo osobliwym zajmowaniem się, więc nie znam odpowiedzi, ale próbowałeś podać datę i godzinę (np. --Since = "2013-11-12 00:00 „)? Ponadto, czy (którekolwiek) twoje zobowiązania mają różne daty osoby odpowiedzialnej i autora?
John Bartholomew
Masz to! Określanie przepracowanego czasu. Nawet nie przyszło mi do głowy, żeby spróbować tego z czasem. Dzięki! Jeśli chodzi o daty committer vs. autor - w tych datach nie zastosowano łatek, więc to nie było to.
3cheesewheel
Wydaje mi się, że „git log - granica” powinna zrobić to za ciebie, aby „git log - granica” - po = "2013-11-12" - przed = "2013-11-12" dokładnie jeden zatwierdzenie (ten, o którym myślisz, że tak :)).
qneill 26.09.16

Odpowiedzi:

231

Dzięki John Bartholomew!

Odpowiedzią jest określenie czasu, np git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"

3cheesewheel
źródło
12
Miły. Jednak to polecenie pominie zatwierdzenia między 23:59 a 00:00 następnego dnia, dlatego git log --after="2013-11-12 00:00" --before="2013-11-13 00:00"jest lepsze. Myślę, gitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &że działałoby to również, jeśli masz zainstalowany gitk.
HelloGoodbye,
6
W git 2.13.0. git log --after="2017-07-25" --before="2017-07-26"daje mi prawidłowe wyniki.
powlo 27.07.17
1
Czy dotyczy to aktualnie wyrejestrowanego oddziału? Jak zobaczyć wszystkie gałęzie?
nawfal
To jest prawidłowa odpowiedź, ale nadal jestem tym zaskoczony i
wysłałem to
28

Zwykle sprawdzam dziennik git i widzę, nad czym pracowałem w danym dniu, i na tej podstawie aktualizuję grafik, ale trudno jest wpisać pełną datę w formacie ISO, więc po prostu robię to w ten sposób

git log --after=jun9 --before=jun10

i dodaję, --authoraby wydrukować tylko moje zobowiązania

git log --since=jun9 --until=jun10 --author=Robert 

Drukuje zatwierdzenia, które wydarzyły się 9 czerwca (tak w tym przypadku w 2016 r., A nie w 2015 lub 2014 r. Itd.).

Te --since/--afteri --until/--beforeparametry mogą również brać takie rzeczy 3 days ago, yesterdayitp

Kohányi Róbert
źródło
Po prostu nie działa, nic nie daje. Czy coś mi brakuje? Czy powinienem podać oddział?
Aurimas
1
@Aurimas Cóż, nie jestem pewien, co poszło nie tak po twojej stronie. Jeśli twoje sincei untilwartości nie są poprawne, nie uzyskasz żadnych wyników, które są pewne. git logNajpierw użyj i spróbuj wybrać wartość sincei untilna podstawie tego, co widzisz. Nie wymaga oddziału ani niczego specjalnego. Nie jestem pewien, od której wersji Git ta funkcja jest dostępna. Upewnij się, że masz również najnowszą wersję.
Kohányi Róbert
6
Musiałem użyć spacji:git log --after="may 2" --before="may 3"
Connor Clark
15

Nie ma nic złego w zaakceptowanej odpowiedzi (którą głosowałem), ale ... jesteśmy tu dla nauki!

Poniższe dane wyjściowe można rozszerzyć / dostosować za pomocą pretty=format:<string> symboli zastępczych :

git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12

Nie jest w 100% odporny na błędy, ponieważ użytkownik mógł wprowadzić ten sam ciąg. Ale dopuszczalne w zależności od tego, które symbole zastępcze są używane. Powyższy fragment kodu nie zawiedzie, na przykład.

Można by równie dobrze przeanalizować cały git logsię JSONi zużywają / manipulować swoje dane do czyjegoś treści serca. Sprawdź https://github.com/dreamyguy/gitlogg i nigdy nie oglądaj się za siebie!

Uwaga: to jeden z moich projektów.

Wallace Sidhrée
źródło
10

Zrobiłem alias git do tego konkretnego celu:

commitsAtDate = "!f() { git log --pretty='format:%C(yellow)%h %G? %ad%Cred%d %Creset%s%C(cyan) [%cn]' --decorate --after=\"$1 0:00\" --before=\"$1 23:59\" --author \"`git config user.name`\"; }; f"

Stosowanie:

git commitsAtDate 2017-08-18
Michael Große
źródło
1
można również określić termin w stosunku do tego aliasu, tj git commitsAtDate yesterday, 2 days agoitd
voiger
-2

Ten skrypt wyświetla dostępny zakres dat zatwierdzeń dla bieżącego repo, a następnie monituje o datę, od której chcesz zobaczyć zatwierdzenia. Wyświetla krótkie SHA i pełne SHA, autora, znacznik czasu zatwierdzenia i komentarze w pojedynczych cudzysłowach.

Skrypt wyświetla monity o daty, dopóki nie naciśniesz Enter lub Control-D.

Użytkownicy komputerów Mac: wymaga daty GNU.

#!/bin/bash

COMMITS=`git log --abbrev-commit --pretty="format:%h %H %ai" | sort -k3 -k4`
FIRST=`echo "$COMMITS" | head -n 1`
LAST=`echo "$COMMITS" | tail -n 1`
echo "First commit: $FIRST"
echo "Last commit: $LAST"
printf "Date to search for commits: "
read DATE
while [[ "$DATE" ]]; do
  NEXT_DATE=`date +%Y-%m-%d -d "$DATE +1 day"`
  #echo "Searching for commits from $DATE to $NEXT_DATE"
  echo `git log --after="$DATE" --before="$NEXT_DATE" --pretty="format:%h %H %an %ci '%s'"`
  printf "\nDate to search for commits: "
  read DATE
done

Zadzwoniłem do skryptu commitsOnDates, a tutaj jest w akcji. Pierwsza data, którą wpisuję, nie zawiera żadnych zatwierdzeń, więc odpowiedź jest tylko pustą linią:

$ commitsOnDates
First commit: 375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f 2015-08-03 13:37:16 -0700
Last commit: 1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 2018-10-13 21:32:27 -0700
Date to search for commits: 2015-08-13


Date to search for commits: 2015-08-03
375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f Mike Slinn 2015-08-03 13:37:16 -0700 'this is a comment'

Date to search for commits: 2018-10-13
1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 Mike Slinn 2018-10-13 21:32:27 -0700 'a comment' 64d6e16 64d6e16338657b82c91ac94bea8ebf7b80dc4c28 Mike Slinn 2018-10-13 18:28:41 -0700 'nother comment' d5eb26e d5eb26e49fc9dceee9b9f5a2d8fa052bff2cfbbc Mike Slinn 2018-10-13 18:16:20 -0700 'no comment' d8a4992 d8a4992df208ba5efb50728311820bdad5ba5332 Mike Slinn 2018-10-13 12:02:00 -0700 'commented'

Date to search for commits:
Mike Slinn
źródło