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?


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.


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


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>

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.