W gałęzi master utworzyłem tag o nazwie v0.1
tak:
git tag -a v0.1
Ale potem zdałem sobie sprawę, że wciąż muszę wprowadzić pewne zmiany, aby połączyć się w master w wersji 0.1, więc to zrobiłem. Ale teraz mój v0.1
tag utknął (aby przywołać analogię karteczek post-it) niewłaściwe zatwierdzenie. Chcę, aby utknęła na ostatnim zatwierdzeniu na master, ale zamiast tego utknęła na drugim ostatnim zatwierdzeniu na master.
Jak mogę przenieść go do ostatniego zatwierdzenia na master?
git push origin :refs/tag/<tagname>
a następnie zróbgit tag -fa <tagname>
i zróbgit push origin master --tags
. W przeciwnym razie możesz skończyć z dziwnymi rzeczami na liście ref na pilocie z dołączonymi znakami ^ i {}. Dziękujemy Danowi na codebasehq.com za zwrócenie na to uwagi.:refs/tag/<tagname>
tego powinny być:refs/tags/<tagname>
.git push -f origin <tagname>
Mówiąc dokładniej, musisz wymusić dodanie tagu, a następnie nacisnąć opcję --tags i -f:
źródło
Podsumowując, jeśli Twój pilot jest wywoływany
origin
i pracujesz wmaster
oddziale:Możesz także wymienić wiersz 4, aby
git push origin --tags
wypchnąć wszystkie zmiany tagami z lokalnych zmian.Na podstawie @ stuart-golodetz, @ greg-hewgill, @eedeep, @ ben-hocking, komentarze pod ich odpowiedziami i komentarze NateS pod moją odpowiedzią.
źródło
Usuń go za pomocą,
git tag -d <tagname>
a następnie utwórz ponownie przy poprawnym zatwierdzeniu.źródło
Staram się unikać kilku rzeczy podczas korzystania z Git.
Wykorzystanie wiedzy na temat elementów wewnętrznych, np. Referencji / tagów. Staram się używać wyłącznie udokumentowanych poleceń Git i unikam używania rzeczy, które wymagają znajomości wewnętrznej zawartości katalogu .git. (To znaczy traktuję Git jako użytkownika Git, a nie programistę Git).
Użycie siły, gdy nie jest wymagane.
Przesadzanie. (Pchanie gałęzi i / lub wielu tagów, aby uzyskać jeden tag tam, gdzie chcę.)
Oto moje pokojowe rozwiązanie zmiany tagu, zarówno lokalnie, jak i zdalnie, bez znajomości wewnętrznych elementów Git.
Używam go, gdy poprawka oprogramowania ostatecznie ma problem i wymaga aktualizacji / ponownego wydania.
github
to przykładowa nazwa zdalna,fix123
to przykładowa nazwa znacznika i790a621265
przykładowe zatwierdzenie.źródło
Zostawię tutaj kolejną formę tego polecenia, która odpowiada moim potrzebom. Byłem
tag,
v0.0.1.2
który chciałem przenieść.I wtedy:
źródło
Jeszcze jeden sposób:
Przenieś tag w zdalnym repozytorium (w razie potrzeby zastąp HEAD innym).
Pobierz zmiany z powrotem.
źródło
Alias, aby przenieść jeden znacznik do innego zatwierdzenia.
W swojej próby, aby przenieść popełnić z e2ea1639 hash zrobić:
git tagm v0.1 e2ea1639
.W przypadku tagów wypychanych użyj
git tagmp v0.1 e2ea1639
.Oba aliasy przechowują oryginalną datę i wiadomość. Jeśli używasz
git tag -d
, utraciłeś oryginalną wiadomość.Zapisz je w swoim
.gitconfig
plikuźródło
Jeśli chcesz przenieść tag z adnotacjami, zmieniając tylko ukierunkowane zatwierdzenie, ale zachowując komunikat adnotacji i inne użycie metadanych:
użycie: moveTag <tag-to-move> <target>
Powyższa funkcja została opracowana przez odwołanie do teerapap / git-move-annotated-tag.sh .
źródło
git tag -f -a my_tag
zachowuje już wiadomość z poprzedniej wiadomości (w wersji git 2.11.0).