Как пометить старшую фиксацию в Git?

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

Итак, как добавить тег к произвольной, более старой фиксации?

Ответ 1

Пример:

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

Где 9fceb02 - начальная часть идентификатора коммита.

Затем вы можете нажать тег, используя git push origin v1.2.

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

В книге Pro Git также есть хорошая глава о тегах.

Предупреждение: При этом создаются теги с текущей датой (например, это значение будет отображаться на странице релизов GitHub). Если вы хотите, чтобы тег был датирован датой фиксации, посмотрите другой ответ.

Ответ 2

Только код

# 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 имеет раздел "On Backdating Tags" , в котором говорится:

Если вы импортировали некоторые изменения из другого VCS и хотели бы добавить теги для основных выпусков своей работы, полезно иметь возможность указать дату для встраивания внутри объекта тега; такие данные в объекте тега влияют, например, на упорядочение тегов в интерфейсе gitweb.

Чтобы установить дату, используемую в будущих объектах тега, установите переменную среды GIT_COMMITTER_DATE (см. более позднее обсуждение возможных значений, наиболее распространенная форма: "ГГГГ-ММ-ДД ЧЧ: ММ" ).

Например:

$ 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"

Ответ 3

Самый простой способ сделать это -

git tag v1.0.0 f4ba1fc

с f4ba1fc является началом хэша коммита, который вы хотите пометить, и v1.0.0 является версией, которую вы хотите пометить.

Ответ 5

ОК, вы можете просто сделать:

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

собрать все теги вместе...

Кроме того, я создал шаги на изображении ниже, для более ясного объяснения шагов: creating tag on a commit hash

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

  1. Перейдите в свою ветку и найдите коммит, в который вы хотите добавить тег, и нажмите на него:

find your commit in bitbucket

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

find where it says No tags

  1. В поле имени тега добавьте свой тег:

add tag name

  1. Теперь вы видите, что тег успешно создан:

enter image description here

Ответ 6

Это старый вопрос, и ответы уже дали всю работу, но есть и новый вариант, который можно рассмотреть.

Если вы используете SourceTree для управления репозиториями git, вы можете щелкнуть правой кнопкой мыши на любой фиксации и добавить к ней тег. С помощью другого mouseclick вы также можете отправить тег прямо на ветку по происхождению.

Ответ 7

Основываясь на ответах других, вот решение с одной строкой, которое устанавливает дату тега, когда оно действительно произошло, использует аннотированный тег и не требует 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 в хэше коммита.

Ответ 8

Ответ @Phrogz великолепен, но не работает в Windows. Вот как пометить старый коммит исходной датой коммита, используя Powershell:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master