it-roy-ru.com

Как пометить старый коммит в Git?

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

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

816
hogsolo

Пример:

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

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

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

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

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

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

1322
dkinzer

Просто код

# 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"
114
Phrogz

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

git tag v1.0.0 f4ba1fc

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

78
PatrickNLT

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

git tag v1.0 ec32d32

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

После этого вы можете нажать на теги:

git Push Origin --tags

Ссылка:

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

30
Adrian Cid Almaguer

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

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

21
Alireza

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

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

10
Stephan Bijzitter

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

4
stason

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

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