Wie kann ich feststellen, welche Version zu einem bestimmten Zeitpunkt in einem Git-Repository vorhanden war?
Angenommen, ich habe ein gemeinsames Repository, in das mehrere Benutzer Änderungen übernehmen können, und ich möchte einen Snapshot um 12:00 Uhr an einem bestimmten Tag in der Vergangenheit einfrieren.
Wenn jemand um 11:30 Uhr ein lokales Commit vornimmt, aber erst um 12:30 Uhr zu den zentralen Repos schiebt, kann ich das später feststellen?
Kann ich erkennen, ob jemand, der nach 12:00 agiert, einen lokalen Commit gemacht hat, um ein aufgezeichnetes Commit-Datum von 11:30 Uhr zu haben, und dann diesen Upstream geschoben hat?
git
protokolliert nicht, wenn Dinge in ein Repository gepusht werden (oder abgerufen werden), nur die beiden Zeitstempel auf den Commits selbst, also glaube ich nicht, dass es einen zuverlässigen Weg gibt, dies zu tun, ohne Hooks zu schreiben würde zusätzliche Metadaten irgendwo für Sie speichern oder sich auf die Protokollierung verlassen, die von git-daemon, ssh oder Ihrem http-Server ausgeführt wird, je nachdem, welche Methode zum Drücken / Abrufen verwendet wird.
Sie können entweder einen Hook verwenden, wahrscheinlich den Post-Receive-Hook , um ihn zu speichern die erforderlichen Informationen irgendwo selbst, oder aktivieren Sie einfach den Reflog (es ist standardmäßig in einem blanken Repository deaktiviert). Der Reflog verfolgt automatisch die lokale Historie einer Verzweigung, und z. git reflog -1 --format=%H master@{12:00}
wird Ihnen sagen, um welchen Commit der Masterreferenzpunkt um 12:00 Uhr war.
Beachten Sie, dass der Reflog abläuft. Sie können die Ablaufzeit mit gc.reflogexpire .
Tags und Links git