У меня проблемы с определением того, какой тег в настоящее время извлечен.
Когда я делаю:
git checkout tag1
git branch
Я не могу определить, на каком теге я нахожусь. Он только регистрирует:
* (no branch)
master
Можно ли узнать, какие теги проверены? В приведенном выше примере это будет tag1
.
Edit: У Якуба Наренбски больше git-фу. Следующая гораздо более простая команда работает идеально:
git describe --tags
(Или без --tags
, если вы проверили аннотированный тег. Мой тег легкий, поэтому мне нужны --tags.)
Оригинальный ответ следует:
git describe --exact-match --tags $(git log -n1 --pretty='%h')
У кого-то с большим git-fu может быть более элегантное решение...
Это использует тот факт, что git-log
сообщает журнал, начиная с того, что вы проверили. %h
печатает сокращенный хэш. Затем git describe --exact-match --tags
находит тег (облегчённый или аннотированный), который точно соответствует данному коммиту.
Синтаксис $()
выше предполагает, что вы используете bash или аналогичный.
Когда вы проверяете тег, у вас есть так называемая «отдельная голова» . Обычно коммит Git HEAD - это указатель на ветку, которую вы в данный момент извлекли. Однако, если вы проверяете что-то, кроме локальной ветки (например, тег или удаленную ветку), у вас есть «отделенная голова» - вы на самом деле не находитесь ни в какой ветке. Вы не должны совершать какие-либо коммиты, находясь в оторванной голове.
Это нормально, проверить тег, если вы не хотите вносить какие-либо изменения. Если вы просто изучаете содержимое файлов или хотите создать свой проект из тега, можно git checkout my_tag
и работать с файлами, пока вы этого не сделаете. делать какие-либо коммиты . Если вы хотите начать изменять файлы, вы должны создать ветвь на основе тега:
$ git checkout -b my_tag_branch my_tag
создаст новую ветку с именем my_tag_branch
, начиная с my_tag
. Сохранять изменения в этой ветке безопасно.