web-dev-qa-db-ger.com

Wie zeige ich alle Commits für einen bestimmten Tag an?

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.

Mit 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"

Mit 2013-11-12 nur

Alle 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"

Mit 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 ?!

153
3cheesewheel

Danke John Bartholomew!

Die Antwort besteht darin, die Zeit anzugeben, z. git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"

185
3cheesewheel

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.

23

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.

11

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
8
Michael Große