Как пометить старый коммит в Git? - PullRequest
824 голосов
/ 10 декабря 2010

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

Так как добавить тег в произвольный, более старый коммит?

Ответы [ 8 ]

1335 голосов
/ 10 декабря 2010

Пример:

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

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

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

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

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

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

116 голосов
/ 13 февраля 2014

Просто код

# 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 и хотели бы добавить теги для основных выпусков своей работы, полезно иметь возможность указать дату для встраивания внутрь объекта тега; такие данные в объекте tag влияют, например, на порядок тегов в интерфейсе 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"
80 голосов
/ 02 июня 2014

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

git tag v1.0.0 f4ba1fc

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

30 голосов
/ 21 сентября 2016

Использовать команду:

git tag v1.0 ec32d32

Где v1.0 - это имя тега, а ec32d32 - коммит, который вы хотите пометить

Когда вы закончите, вы можете нажать на теги:

git push origin --tags

Ссылка:

Git (контроль версий): Как пометить конкретную предыдущую точку фиксации в GitHub?

22 голосов
/ 08 июля 2017

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

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. На странице commit , справа найдите где написано No tags и нажмите на значок +:

find where it says No tags

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

add tag name

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

enter image description here

10 голосов
/ 15 сентября 2015

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

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

4 голосов
/ 07 октября 2018

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

2 голосов
/ 07 февраля 2019

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

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