Ich habe mir bereits die relevanten Dokumente von git-scm.com und gitref.org angesehen, aber ich kann das nicht herausfinden.
Angenommen, ich möchte alle Commits für Dienstag, den 12. November 2013, erhalten. Am Beispiel eines vorhandenen Repos weiß ich, dass ich Commits an diesem Tag sowie am Tag davor und am Tag danach habe.
2013-11-11
und 2013-11-12
Alle folgenden Verpflichtungsermächtigungen gelten sowohl für den 11. als auch den 12. November:
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"
2013-11-12
nurAlle folgenden Dinge verpflichten mich nicht:
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"
2013-11-12
und 2013-11-13
Wie erwartet (aus den Ergebnissen von 2013-11-11
und 2013-11-12
oben), alle folgenden Ergebnisse geben mir sowohl vom 12. als auch vom 13. November:
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"
...und so weiter und so fort. Ich habe das Gefühl, dass ich jede mögliche Kombination von since
, after
, before
und until
ausprobiert habe, aber immer noch keine Antwort gefunden habe Ich verstehe, ob diese Optionen inklusiv oder exklusiv sind, da sie inklusiv zu sein scheinen, wenn die beiden Daten unterschiedlich sind, aber exklusiv, wenn sie am selben Tag sind. Habe ich etwas verpasst/was mache ich falsch ?!
Die Antwort besteht darin, die Zeit anzugeben, z. git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"
Normalerweise überprüfe ich mein Git-Protokoll und sehe, was ich an einem bestimmten Tag gearbeitet habe, und aktualisiere meine Arbeitszeittabelle darauf basierend. Es ist jedoch ein Problem, das vollständige Datum im ISO-Format einzugeben, also mache ich es einfach so
git log --after=jun9 --before=jun10
und ich füge hinzu --author
um nur meine Commits auszudrucken
git log --since=jun9 --until=jun10 --author=Robert
Dieser Ausdruck druckt Commits, die am letzten 9. Juni stattgefunden haben (in diesem Fall also für 2016 und nicht für 2015 oder 2014 und so weiter).
Das --since/--after
und --until/--before
Parameter können auch Dinge wie 3 days ago
, yesterday
usw.
An der akzeptierten Antwort (die ich positiv bewertet habe) ist nichts auszusetzen, aber ... wir sind hier für die Wissenschaft!
Die folgende Ausgabe kann mit pretty=format:<string>
Platzhalter erweitert/angepasst werden:
git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12
Nicht 100% fehlerfrei, da derselbe String möglicherweise von einem Benutzer eingegeben wurde. Aber akzeptabel, abhängig davon, welche Platzhalter verwendet werden. Das obige Snippet würde zum Beispiel nicht scheitern.
Man könnte auch einfach den gesamten git log
Zu JSON
analysieren und seine Daten nach Herzenslust konsumieren/manipulieren. Check https://github.com/dreamyguy/gitlogg aus und schau niemals zurück!
Haftungsausschluss: Das ist eines meiner Projekte.
Ich habe einen Alias für diesen speziellen Zweck erstellt:
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"
Verwendung:
git commitsAtDate 2017-08-18