437 Stimmen

Wie kann man in Git nach Datum auschecken?

Ich arbeite gerade an einer Regression im Quellcode. Ich würde Git gerne sagen: "Checkout der Quelle basierend auf einem parametrisierten Datum/Uhrzeit". Ist dies möglich?

Ich habe auch Änderungen in meiner aktuellen Ansicht vorgenommen, die ich nicht verlieren möchte. Im Idealfall möchte ich zwischen der aktuellen Quelle und einer Version, die mich aufgrund eines früheren Datums interessiert, hin und her schalten.

486voto

Andy Punkte 41776

Um Ihre aktuellen Änderungen beizubehalten

Sie können Ihre Arbeit aufbewahren, ohne sie zu übertragen, mit git stash . Sie würden dann git stash pop um es zurückzubekommen. Oder Sie können (als carleeto sagte) git commit in einen separaten Zweig.

Checkout nach Datum mit rev-parse

Sie können einen Commit bis zu einem bestimmten Datum auschecken, indem Sie rev-parse wie diese:

git checkout 'master@{1979-02-26 18:30:00}'

Weitere Einzelheiten zu den verfügbaren Optionen finden Sie in der git-rev-parse .

Wie in den Kommentaren erwähnt, verwendet diese Methode das Reflog, um den Commit in der Historie zu finden. Standardmäßig sind diese Einträge verfallen nach 90 Tagen . Obwohl die Syntax für die Verwendung von reflog weniger ausführlich ist, können Sie nur 90 Tage zurückgehen.

Auschecken nach Datum mit rev-list

Die andere Möglichkeit, bei der das Reflog nicht verwendet wird, ist die Verwendung von rev-list um die Übergabe zu einem bestimmten Zeitpunkt mit zu erhalten:

git checkout `git rev-list -n 1 --first-parent --before="2009-07-27 13:37" master`

Beachten Sie die -erster-Elternteil wenn Sie nur Ihre Historie und nicht die durch eine Zusammenführung eingebrachten Versionen haben wollen. Das ist es, was Sie normalerweise wollen.

176voto

Rocky Punkte 5166

Die Lösung von Andy funktioniert bei mir nicht. Hier habe ich einen anderen Weg gefunden:

git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`

Git: Checkout nach Datum

21voto

Carl Punkte 41134

Sieht so aus, als bräuchten Sie so etwas wie das hier: Git-Checkout basierend auf dem Datum

Mit anderen Worten: Sie verwenden rev-list um die Übergabe zu finden und dann checkout zu verwenden, um um sie tatsächlich zu erhalten.

Wenn Sie Ihre abgestuften Änderungen nicht verlieren wollen, wäre es am einfachsten, wenn Sie einen neuen Zweig zu erstellen und die Änderungen in diesen Zweig zu übertragen. Sie können jederzeit zwischen zwischen den Zweigen hin und her wechseln.

Edit: Der Link ist nicht mehr verfügbar, hier ist der Befehl:

git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`

15voto

Zombo Punkte 1

Für diejenigen, die eine Pipe der Befehlssubstitution vorziehen

git rev-list -n1 --before=2013-7-4 master | xargs git checkout

13voto

BartoszKP Punkte 33206

In meinem Fall ist die -n 1 Option funktioniert nicht. Unter Windows habe ich festgestellt, dass die folgende Befehlsfolge gut funktioniert:

git rev-list -1 --before="2012-01-15 12:00" master

Dies gibt das entsprechende SHA der Übergabe für das angegebene Datum zurück und dann:

git checkout SHA

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X