Wie kehren Sie zu einem bestimmten Tag in Git zurück?

85

Ich weiß, wie ich zu älteren Commits in einem Git-Zweig zurückkehren kann, aber wie kann ich zum Zustand eines Zweigs zurückkehren, der von einem Tag vorgegeben wird? Ich stelle mir so etwas vor:

git revert -bytag "Version 1.0 Revision 1.5"

Ist das möglich?

zachd1_618
quelle
Möchten Sie "den Zweig zurückspulen" (dh Commits entfernen ) oder dem aktuellen Zweig einen neuen Commit hinzufügen , der den Zweig so einrichtet, dass alle Dateien "so sind, wie sie bei dem von diesem Tag angegebenen Commit waren"?
Torek
Entweder sollte die Arbeit erledigt werden, obwohl ich denke, ich würde dem aktuellen Zweig lieber ein neues Commit hinzufügen, wie Sie es beschreiben
zachd1_618
Verwenden Sie in diesem Fall die git checkout <id> .Methode aus dieser Antwort .
Torek

Antworten:

131

Git-Tags sind nur Zeiger auf das Commit. Sie verwenden sie also genauso wie HEAD, Verzweigungsnamen oder Commit-Sha-Hashes. Sie können Tags mit jedem git-Befehl verwenden, der Commit- / Revisionsargumente akzeptiert. Sie können es mit versuchen git rev-parse tagname, um das Commit anzuzeigen, auf das es zeigt.

In Ihrem Fall haben Sie mindestens diese beiden Alternativen:

  1. Setzen Sie den aktuellen Zweig auf ein bestimmtes Tag zurück:

    git reset --hard tagname
    
  2. Generieren Sie oben ein Revert-Commit, um zum Status des Tags zu gelangen:

    git revert tag
    

Dies kann jedoch zu Konflikten führen, wenn Sie Merge-Commits haben.

jurglisch
quelle
29
Ich denke, "git revert <tag>" setzt die Änderungen im getaggten Commit zurück, anstatt Ihre Arbeitskopie in dieser Version wiederherzustellen.
Matt
3
Wie @Matt sagte, ist die akzeptierte Antwort einfach falsch, da sie nur die Änderungen im getaggten Commit zurücksetzt. Verwenden Sie am besten Commit-Hashes und befolgen Sie diese Antwort: stackoverflow.com/a/4114122/6348485
Swagga Ting
Hallo, könnten Sie erklären, "oben ein Revert-Commit generieren, um zum Status des Tags zu gelangen:"? Ich habe leider keine Ahnung was das bedeutet.
John Little
12

Verwenden Sie git reset :

git reset --hard "Version 1.0 Revision 1.5"

(unter der Annahme, dass die angegebene Zeichenfolge das Tag ist).

devnull
quelle
1

Sie können Git Checkout verwenden.

Ich habe die akzeptierte Lösung ausprobiert, aber einen Fehler erhalten. warning: refname '<tagname>' is ambiguous'

Wie in der Antwort angegeben, verhalten sich Tags jedoch wie ein Zeiger auf ein Commit. Wie bei einem Commit-Hash können Sie das Tag einfach auschecken. Der einzige Unterschied besteht darin, dass Sie Folgendes vorwegnehmen tags/:

git checkout tags/<tagname>

joshi123
quelle