Как пометить старшую фиксацию в 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
является версией, которую вы хотите пометить.
Ответ 4
Использовать команду:
git tag v1.0 ec32d32
Где v1.0 - это имя тега, а ec32d32 - это фиксация, которую вы хотите пометить
После выполнения вы можете нажать теги:
git push origin --tags
Ссылка:
Git (контроль версий): как я могу пометить конкретную предыдущую точку фиксации в GitHub?
Ответ 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 и сделал это оттуда:
- Перейдите в свою ветку и найдите коммит, в который вы хотите добавить тег, и нажмите на него:
![find your commit in bitbucket]()
- На странице фиксации справа найдите место, где написано
No tags
, и щелкните значок +
:
![find where it says No tags]()
- В поле имени тега добавьте свой тег:
![add tag name]()
- Теперь вы видите, что тег успешно создан:
![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