Jak oznaczyć starszy zatwierdzenie w Git?

949

Jesteśmy nowi w Git i chcę ustawić tag na początku naszego repozytorium. Nasz kod produkcyjny jest taki sam jak repozytorium początkowe, ale od tego czasu wprowadziliśmy zatwierdzenia. Tag na początku pozwoliłby nam „wycofać” produkcję do znanego, stabilnego stanu.

Jak więc dodać tag do dowolnego, starszego zatwierdzenia?

hogsolo
źródło
Przybyłem tutaj, szukając pomocy w usuwaniu starego tagu lokalnie i na pilocie i ostatecznie uznałem
Aleksander Lidtke
1
I nie zapomnij Jak wcisnąć tag do zdalnego repozytorium za pomocą Git? ponieważ Git nie wypchnie tagu bez zrobienia czegoś specjalnego.
jww
Możesz dodać znacznik do starszych zatwierdzeń, używając skrótu zatwierdzenia. Oto składnia tego: git tag -a <nazwa_tag> -m "tag tag" <hash commit> Dla bardziej podstawowych do zaawansowanych, oto odnośnik abhisheksharma.online/git-tags
Abhishek Sharma

Odpowiedzi:

1510

Przykład:

git tag -a v1.2 9fceb02 -m "Message here"

Gdzie 9fceb02jest początkowa część identyfikatora zatwierdzenia.

Następnie możesz wcisnąć tag za pomocą git push origin v1.2.

Możesz zrobić, git logaby wyświetlić wszystkie identyfikatory zatwierdzeń w bieżącej gałęzi.

W książce Pro Git znajduje się również dobry rozdział na temat tagowania .

Ostrzeżenie: spowoduje to utworzenie tagów z bieżącą datą (i ta wartość będzie na przykład wyświetlana na stronie wydań GitHub). Jeśli chcesz, aby tag był opatrzony datą zatwierdzenia, zapoznaj się z inną odpowiedzią .

dkinzer
źródło
45
Możesz to również zrobić w menu prawym przyciskiem myszy w gitk - wygodne, jeśli tak i tak znajdujesz SHA1.
Cascabel,
62
Pomiń części -ai, -m "Message here"jeśli nie chcesz dodawać wiadomości:git tag v1.2 9fceb02
devius
3
Możesz także użyć pełnego identyfikatora zatwierdzenia.
j08lue
1
@devius Jaka jest różnica między używaniem -aa -m. Wygląda na -ato, że strona podręcznika jest domyślna, gdy -mjest używana.
John Strood
7
git push --tags origin masterwypchnie wszystkie tagi lokalnego oddziału na zdalne. Wolisz git push origin <tag_name>po prostu wcisnąć utworzony tag. Patrz: stackoverflow.com/a/5195913/452708 , git-scm.com/book/en/v2/Git-Basics-Tagging
Abhijeet
144

Tylko kod

# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02

# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"

# set HEAD back to whatever you want it to be
git checkout master

Detale

Odpowiedź @dkinzer tworzy tagi, których data jest bieżącą datą (po uruchomieniu git tagpolecenia), a nie datą zatwierdzenia. Pomoc Git dla tagzawiera sekcję „O tagach backdating”, która mówi:

Jeśli zaimportowałeś jakieś zmiany z innego VCS i chciałbyś dodać tagi do głównych wydań swojej pracy, przydatna jest możliwość określenia daty do umieszczenia wewnątrz obiektu tagu; takie dane w obiekcie znacznika wpływają na przykład na kolejność znaczników w interfejsie gitweb.

Aby ustawić datę używaną w przyszłych obiektach znaczników, ustaw zmienną środowiskową GIT_COMMITTER_DATE(zobacz późniejsze omówienie możliwych wartości; najczęstszą formą jest „RRRR-MM-DD GG: MM”).

Na przykład:

$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

Strona „How to Tag in Git” pokazuje nam, że możemy wyodrębnić czas zatwierdzenia HEAD poprzez:

git show --format=%aD  | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700

Możemy wyodrębnić datę konkretnego zatwierdzenia poprzez:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"

Jednak zamiast powtarzać zatwierdzenie dwa razy, łatwiej jest zmienić HEAD na to zatwierdzenie i użyć go domyślnie w obu poleceniach:

git checkout 9fceb02 

GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"
Phrogz
źródło
4
@ ColonelPanic, twoje życzenie jest moim rozkazem! github.com/lucasrangit/git-custom-commands/blob/master/…
Lucas
Jeśli korzystasz z Github do zarządzania wydaniami i zależy Ci na dacie pokazanej na stronie / tagach twojego projektu, ustawienie GIT_COMMITTER_DATE jest szczególnie ważne!
Lesley,
2
@ColonelPanic Dałem ci głos za słowo, i chciałbym dać ci drugi kod, ale gwiazda github będzie musiała wystarczyć.
andyhasit
96

Najprostszym sposobem na to jest:

git tag v1.0.0 f4ba1fc

przy f4ba1fcczym początek mieszania z popełnić chcesz tag i v1.0.0będąc wersja chcesz tag.

PatrickNLT
źródło
Perfekcyjnie, dzięki :).
Saleh Enam Shohag
36

OK , możesz po prostu zrobić:

git tag -a <tag> <commit-hash>

Więc jeśli chcesz dodać tag: 1.0.2 do zatwierdzenia e50f795, po prostu wykonaj:

git tag -a 1.0.2 e50f795

Na końcu dodajesz wiadomość , używając -mczegoś takiego:

git tag -a 1.0.2 e50f795 -m "my message"

W końcu musisz go zepchnąć remote, aby to zrobić, po prostu wykonaj:

git push origin 1.0.2 

Jeśli masz wiele tagów, o których nie chcesz wspominać jeden po drugim, po prostu wykonaj:

git push origin --tags

aby połączyć wszystkie tagi razem ...

Ponadto utworzyłem kroki na poniższym obrazku, aby uzyskać dodatkowe wyjaśnienie kroków: tworzenie tagu w skrócie zatwierdzenia

Możesz także dodać znacznik do Huba lub używając narzędzi takich jak SourceTree , aby uniknąć poprzednich kroków, w tym przypadku zalogowałem się do mojego Bitbucket i zrobiłem to stamtąd:

  1. Przejdź do swojego oddziału i znajdź zatwierdzenie, do którego chcesz dodać znacznik, i kliknij na niego:

znajdź swoje zatwierdzenie w bitbucket

  1. Na stronie zatwierdzania po prawej stronie znajdź, co mówi, No tagsi kliknij +ikonę:

znajdź, gdzie jest napisane Brak tagów

  1. W polu nazwy znacznika dodaj swój znacznik:

dodaj nazwę tagu

  1. Teraz widzisz, że tag został pomyślnie utworzony:

wprowadź opis zdjęcia tutaj

Alireza
źródło
11

To stare pytanie, na które już udzielono odpowiedzi, ale jest też nowa opcja, którą można rozważyć.

Jeśli używasz SourceTree do zarządzania repozytoriami git, możesz kliknąć prawym przyciskiem myszy dowolny zatwierdzenie i dodać do niego znacznik. Kolejnym kliknięciem myszy możesz wysłać znacznik bezpośrednio do gałęzi w miejscu pochodzenia.

Stephan Bijzitter
źródło
6

Opierając się na odpowiedziach innych, oto jedno-liniowe rozwiązanie, które ustawia datę znacznika na datę, w której rzeczywiście się stało, używa znacznika z adnotacjami i nie wymaga git checkout:

tag="v0.1.3" commit="8f33a878" bash -c 'GIT_COMMITTER_DATE="$(git show --format=%aD $commit)" git tag -a $tag -m $tag $commit'
git push --tags origin master

gdzie tagjest ustawiony na żądany ciąg znacznika i commitna skrót zatwierdzenia.

kamieniarz
źródło
3

Odpowiedź przez @Phrogz jest super, ale nie działa w systemie Windows. Oto jak otagować stare zatwierdzenie oryginalną datą zatwierdzenia za pomocą Powershell:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
Coxtn
źródło