Jak powrócić do określonego tagu w Git?

85

Wiem, jak powrócić do starszych zatwierdzeń w gałęzi Git, ale jak powrócić do stanu gałęzi podyktowanego tagiem? Wyobrażam sobie coś takiego:

git revert -bytag "Version 1.0 Revision 1.5"

czy to możliwe?

zachd1_618
źródło
Czy chcesz "przewinąć gałąź do tyłu" (tj. Usunąć zatwierdzenia), czy dodać nowe zatwierdzenie do bieżącej gałęzi, które ustawia gałąź tak, że wszystkie pliki są "takie, jakie były w zatwierdzeniu podanym przez ten znacznik"?
torek
Albo powinienem wykonać zadanie, chociaż myślę, że wolałbym raczej dodać nowe zatwierdzenie do bieżącej gałęzi w sposób, który
opisujesz
W takim przypadku użyj git checkout <id> .metody z tej odpowiedzi .
torek

Odpowiedzi:

130

Tagi Git to po prostu wskaźniki do zatwierdzenia. Używasz ich w ten sam sposób, jak robisz HEAD, nazwy gałęzi czy zatwierdzanie haszów sha. Możesz używać znaczników z dowolnym poleceniem git, które akceptuje argumenty zatwierdzenia / rewizji. Możesz spróbować, git rev-parse tagnameaby wyświetlić zatwierdzenie, na które wskazuje.

W twoim przypadku masz co najmniej dwie alternatywy:

  1. Zresetuj bieżącą gałąź do określonego tagu:

    git reset --hard tagname
    
  2. Wygeneruj zatwierdzenie przywracania na górze, aby przejść do stanu tagu:

    git revert tag
    

Może to jednak spowodować pewne konflikty, jeśli masz zatwierdzenia scalające.

jurglic
źródło
28
Myślę, że "git revert <tag>" przywraca zmiany w oznaczonym zatwierdzeniu zamiast przywracania kopii roboczej do tej wersji.
Matt
Również pozbyć się plików nieśledzonej / niewersjonowany, wykonaj stackoverflow.com/a/912737/923560
Abdull
3
Jak powiedział @Matt, zaakceptowana odpowiedź jest po prostu niepoprawna, ponieważ przywraca tylko zmiany w oznaczonym zatwierdzeniu. Najlepszym rozwiązaniem jest użycie wartości
skrótu
Cześć, czy mógłbyś wyjaśnić „generuj zatwierdzenie przywracania na górze, aby przejść do stanu tagu:”? Nie mam pojęcia, co to niestety oznacza.
John Little
12

Użyj resetowania git :

git reset --hard "Version 1.0 Revision 1.5"

(zakładając, że określony ciąg jest tagiem).

devnull
źródło
1

Możesz skorzystać z usługi Git Checkout.

Próbowałem zaakceptowanego rozwiązania, ale wyskoczył błąd, warning: refname '<tagname>' is ambiguous'

Ale jak stwierdza odpowiedź, tagi zachowują się jak wskaźnik do zatwierdzenia, więc tak jak w przypadku skrótu zatwierdzenia, możesz po prostu pobrać tag. Jedyna różnica polega na tym, że poprzedzasz go tags/:

git checkout tags/<tagname>

joshi123
źródło