Як покласти теги на більш старий комітет у Git?


949

Ми новачка в git, і я хочу встановити тег на початку нашого сховища. Наш виробничий код такий же, як і в початковому сховищі, але з цього часу ми вносили комісії. Тег на початку дозволив би нам "повернути" виробництво до відомого, стабільного стану.

Тож як додати тег до довільної, старшої комісії?


Я прийшов сюди, шукаючи допомоги, видаляючи старий тег локально та на віддаленому веб-сайті, і, зрештою, виявив це корисним, можливо, це допоможе і комусь іншому: gist.github.com/mobilemind/7883996
Aleksander Lidtke

1
І не забувайте Як перенести тег до віддаленого сховища за допомогою Git? тому що Git не натисне тег, не зробивши щось особливе.
jww

Ви можете додати тег до старих комітетів, використовуючи хеш фіксації. Ось синтаксис для цього: git tag -a <tagName> -m "тег-повідомлення" <фіксувати хеш> Для більш базового для розширеного, ось посилання abhisheksharma.online/git-tags
Abhishek Sharma

Відповіді:


1510

Приклад:

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

Де 9fceb02знаходиться початкова частина ідентифікатора.

Потім ви можете натиснути тег за допомогою git push origin v1.2.

Ви можете зробити, git logщоб показати всі ідентифікатори комісій у вашому поточному відділенні.

У книзі Pro Git також є хороша глава щодо тегів .

Попередження: Це створює теги з поточною датою (і це значення є тим, що відображатиметься, наприклад, на сторінці релізів GitHub). Якщо ви хочете, щоб тег був датований датою здійснення, перегляньте іншу відповідь .


45
Ви також можете це зробити в меню правої кнопки миші в gitk - зручно, якщо саме так ви знайдете SHA1.
Каскабель

62
Пропустіть -aі -m "Message here"частини, якщо ви не хочете додавати повідомлення:git tag v1.2 9fceb02
devius

3
Ви також можете використовувати повний ідентифікатор комісії.
j08lue

1
@devius У чому різниця між використанням -aта -m. Сторінка "man" начебто -aмає на увазі, коли -mвона використовується.
Джон Строд

7
git push --tags origin masterнатискав би всі теги на локальній гілці на віддалений. Переважно git push origin <tag_name>просто натиснути створений тег. Див: stackoverflow.com/a/5195913/452708 , git-scm.com/book/en/v2/Git-Basics-Tagging
Abhijeet

144

Просто Кодекс

# 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

Деталі

Відповідь @dkinzer створює теги, дата яких - це поточна дата (коли ви виконували git tagкоманду), а не дата здійснення. У довідці Git tagє розділ "Про оновлення тегів", де написано:

Якщо ви імпортували деякі зміни з іншого VCS і хочете додати теги для основних випусків вашої роботи, корисно мати змогу вказати дату вбудовування всередині об’єкта тегів; такі дані в об’єкті тегів впливають, наприклад, на впорядкування тегів в інтерфейсі gitweb.

Для встановлення дати, що використовується у майбутніх об’єктах тегів, встановіть змінну середовища GIT_COMMITTER_DATE(див. Подальше обговорення можливих значень; найпоширенішою формою є "РРРР-MM-DD HH: MM").

Наприклад:

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

Сторінка "Як позначити тег у Git" показує нам, що ми можемо витягти час вчинення HEAD за допомогою:

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

Ми можемо отримати дату конкретного вчинення через:

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

Однак замість того, щоб повторити команду двічі, здається, що простіше просто змінити HEAD на цей комікт і використовувати його неявно в обох командах:

git checkout 9fceb02 

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

4
@ColonelPanic, твоє бажання - це моя команда! github.com/lucasrangit/git-custom-commands/blob/master/…
Лукас

Якщо ви використовуєте Github для управління випусками та піклування про дату, показану на сторінці проекту / теги вашого проекту, налаштування GIT_COMMITTER_DATE особливо важливо!
Леслі

2
@ColonelPanic Я дав вам нагороду за каламбур, і хотілося б, щоб я міг вам дати другий за код, але зірка Github повинна буде робити.
andyhasit

96

Найпростіший спосіб зробити це:

git tag v1.0.0 f4ba1fc

з f4ba1fcтим, що є початком хешу комітету, який ви хочете позначити, і v1.0.0є версією, яку ви хочете помітити.


Ідеально дякую :).
Салех Енам Шогаг


36

Гаразд , ви можете просто зробити:

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

Тож якщо ви хочете додати тег: 1.0.2 для фіксації e50f795, просто виконайте:

git tag -a 1.0.2 e50f795

Також ви додаєте повідомлення в кінці, використовуючи -mщось подібне:

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

Зрештою, вам потрібно натиснути його на remote, щоб зробити це, просто зробіть:

git push origin 1.0.2 

Якщо у вас є багато тегів, які ви не хочете згадувати їх по черзі, просто виконайте такі дії:

git push origin --tags

щоб натиснути всі теги разом ...

Крім того, я створив кроки на зображенні нижче для більш детального роз'яснення кроків: створення тегу на хеші фіксації

Ви також можете ввести тег у Hub або використовуючи такі інструменти, як SourceTree , щоб уникнути попередніх кроків, я увійшов у свій Bitbucket у цьому випадку та зробив це звідти:

  1. Перейдіть до своєї філії та знайдіть комісію, до якої потрібно додати тег, та натисніть на нього:

знайдіть свою комісію в bitbucket

  1. На сторінці фіксації праворуч знайдіть там, де написано, No tagsта натисніть на +піктограму:

знайти там, де написано Немає тегів

  1. У полі імені тегу додайте тег:

Додати ім'я тегу

  1. Тепер ви бачите, що тег успішно створено:

введіть тут опис зображення


11

Це давнє запитання, і відповіді вже давали всю роботу, але є також новий варіант, який можна розглянути.

Якщо ви використовуєте SourceTree для управління вашими сховищами git, ви можете клацнути правою кнопкою миші будь-яку комісію і додати до неї тег. Іншим клацанням миші ви також можете відправити тег прямо до гілки за походженням.


6

Опираючись на відповіді інших, ось рішення, що містить одне вкладиш, визначає дату тегу, коли це відбулося насправді, використовує помічений тег і не вимагає 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

де tagвстановлено потрібний рядок тегу та commitхеш фіксації.


3

Відповідь на @Phrogz великий, але не працює на Windows. Ось як позначати стару комісію з початковою датою комісії за допомогою Powershell:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.