Як покласти теги на більш старий комітет у 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.