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?


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.


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).


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>

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.