Ich arbeite an einer Regression im Quellcode. Ich möchte Git sagen: "Überprüfen Sie die Quelle anhand eines parametrisierten Datums / einer parametrisierten Uhrzeit". Ist das 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, an der ich interessiert bin, basierend auf einem früheren Datum hin und her wechseln.
git
git-checkout
Amir Afghani
quelle
quelle
git bisect good
.tags
.Antworten:
Um Ihre aktuellen Änderungen beizubehalten
Sie können Ihre Arbeit verstauen, ohne sie zu verpflichten
git stash
. Sie würden es dann verwendengit stash pop
, um es zurückzubekommen. Oder Sie können es (wie Carleeto sagte)git commit
zu einem separaten Zweig.Kaufabwicklung nach Datum mit rev-parse
Sie können ein Commit bis zu einem bestimmten Datum
rev-parse
wie folgt auschecken :Weitere Details zu den verfügbaren Optionen finden Sie in der
git-rev-parse
.Wie in den Kommentaren erwähnt, verwendet diese Methode das Reflog, um das Commit in Ihrem Verlauf zu finden. Standardmäßig verfallen diese Einträge nach 90 Tagen . Obwohl die Syntax für die Verwendung des Reflogs weniger ausführlich ist, können Sie nur 90 Tage zurückgehen.
Checkout nach Datum mit Rev-Liste
Die andere Option, bei der das Reflog nicht verwendet wird, besteht
rev-list
darin, das Commit zu einem bestimmten Zeitpunkt abzurufen mit:Beachten Sie das --first-parent, wenn Sie nur Ihren Verlauf und keine durch Zusammenführung eingebrachten Versionen möchten. Das ist es, was du normalerweise willst.
quelle
git co 'master@{2 days ago}'
.git rev-list -n 1 --before="2009-07-27 13:37" master
$(...)
sind bevorzugt.Andys Lösung funktioniert bei mir nicht. Hier habe ich einen anderen Weg gefunden:
Git: Checkout nach Datum
quelle
error: unknown switch `n'
Ideen, wie ich das umgehen kann?Sieht so aus, als ob Sie etwas in dieser Richtung brauchen: Git-Checkout basierend auf dem Datum
Mit anderen Worten, Sie verwenden
rev-list
das Commit und verwenden dann die Kasse, um es tatsächlich abzurufen.Wenn Sie Ihre bereitgestellten Änderungen nicht verlieren möchten, ist es am einfachsten, einen neuen Zweig zu erstellen und ihn diesem Zweig zuzuweisen. Sie können jederzeit zwischen Zweigen hin und her wechseln.
Bearbeiten: Der Link ist ausgefallen, daher hier der Befehl:
quelle
git checkout branch@{date}
, wenn das Reflog abläuft, aber Sie können es verwendengit checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
.Für diejenigen, die eine Pipe bevorzugen, um die Substitution zu befehlen
quelle
In meinem Fall
-n 1
funktioniert die Option nicht. Unter Windows habe ich festgestellt, dass die folgende Befehlsfolge einwandfrei funktioniert:Dies gibt die SHA des entsprechenden Commits für das angegebene Datum zurück und dann:
quelle
Die
git rev-parse
von @Andy vorgeschlagene Lösung funktioniert einwandfrei, wenn das Datum, an dem Sie interessiert sind , das Datum des Commits ist . Wenn jedoch mögen , dass Sie auf der Basis zur Kasse Autor Datum ,rev-parse
wird nicht funktionieren, weil sie über keine Möglichkeit bieten, dieses Datum zu verwenden , um die Commits zur Auswahl. Stattdessen können Sie Folgendes verwenden.(Wenn Sie auch die Zeitverwendung
$1 >= "2016-04-12" && $2 >= "11:37"
im awk- Prädikat angeben möchten .)quelle
Fahren Sie mit der
rev-list
Option fort, wenn Sie das letzte Zusammenführungs-Commit von Ihrem Hauptzweig in Ihren Produktionszweig finden möchten (als rein hypothetisches Beispiel):Ich musste den Code finden, der sich zu einem bestimmten Datum auf den Produktionsservern befand. Das hat es für mich gefunden.
quelle
Wenn Sie zum Zeitpunkt der Erstellung eines Builds zur genauen Version des Repositorys zurückkehren möchten, markieren Sie am besten das Commit, aus dem Sie den Build erstellen.
Die anderen Antworten bieten Techniken, mit denen das Repository zu einem bestimmten Zeitpunkt auf das letzte Commit in einem Zweig zurückgesetzt werden kann - sie reichen jedoch möglicherweise nicht immer aus. Wenn Sie beispielsweise aus einem Zweig erstellen und den Zweig später löschen oder aus einem Zweig erstellen, der später neu basiert, kann das Commit, aus dem Sie erstellt haben, in Git von jedem aktuellen Zweig aus "nicht erreichbar" werden. Nicht erreichbare Objekte in Git werden möglicherweise entfernt, wenn das Repository komprimiert wird.
Wenn Sie ein Tag auf das Commit setzen, wird es nie unerreichbar, unabhängig davon, was Sie anschließend mit Zweigen tun (außer das Entfernen des Tags).
quelle
Nehmen Sie die gedruckte Zeichenfolge (zum Beispiel XXXX) und tun Sie Folgendes:
quelle