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.

3voto

tyoc213 Punkte 1173

Sie brauchen nur eine kleine Änderung, wenn Sie die Grenze von reflog (das Datum, das Sie geklont das Repositorium oder 90 Tage ein gehen der Geschichte scheint es aus anderen Notizen)

git checkout `git rev-list -1 --before="Jan 17 2020" HEAD`

Und Sie können auch Folgendes verwenden

git checkout `git rev-list -1 --before="Jan 17 2020 8:06 UTC-8" HEAD`

wird die vorherige Übergabe in Bezug auf das eingegebene Datum oder die eingegebene Datumszeit gecheckt, siehe, dass Sie Modifikatoren für das Datum verwenden können, ich schätze, wenn Sie nicht UTC+-N verwenden, wird nur die UTC-Zeit verwendet.

Sehen Sie, dass ich nur den Master in HEAD geändert habe, es scheint zu funktionieren, auch wenn Sie nicht reflog zu dem Datum haben, das Sie überprüfen wollen!!!

2voto

James Andariese Punkte 505

Hier ist eine Alias-Version, die ich zum Auschecken nach relativer Zeit verwende:

[alias]
    parsedate = "!set -x ;arg1=\"$1\" && shift && which gdate &> /dev/null && gdate -d \"$arg1\" || date -d \"$arg1\""
    codate = "!d=\"$(git parsedate \"$1\")\" && shift && git checkout \"$(git rev-list -n1 --first-parent --before=\"$d\" HEAD)\""

So können Sie Ihre Änderungen von vor 2 Monaten in einen neuen Zweig namens test mit folgendem Befehl:

git codate '2 months ago' -b test

Dies wird bei einem flachen Klon nicht funktionieren, also machen Sie ihn zuerst mit flacher:

git fetch --unshallow

Wenn Sie einen unshallow-Fehler erhalten, finden Sie vielleicht Hilfe in der hervorragenden Antwort unter git fatal: Fehler im Objekt: unshallow

Erfordert GNU coreutils und funktioniert unter Linux und macOS mit brew.

Installation auf macos mit brew install coreutils .

1voto

Luca C. Punkte 9744
git rev-list -n 1 --before="2009-07-27 13:37" origin/master

die gedruckte Zeichenfolge (z. B. XXXX) nehmen und tun:

git checkout XXXX

0voto

Matt Faus Punkte 5875

Wenn Sie eine einzelne Datei ab einem bestimmten Datum auschecken wollen, können Sie den Dateipfad an beide Befehle übergeben.

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

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