Есть ли простая команда для преобразования ветки в тег?
Я собираюсь завершить утомительный процесс преобразования "тупых снимков" в git. Этот процесс идет очень хорошо (благодаря этому процессу переименования), но теперь я понял, что некоторые из созданных мной ветвей не заслуживают branch
а скорее tag
,
Поскольку все по-прежнему локально (никогда не отправляется в репозиторий), я нашел этот вопрос (и связанный с ним ответ) несколько более громоздким, чем я предпочитаю, поэтому мне было интересно, могу ли я воспользоваться ярлыком с помощью некоторого простого "convert-from-branch-to" -tag "команда?
Есть ли такая простая команда для преобразования ветки в тег?
(Я знаю, что могу оставить все как есть, но мне очень нравится, как gitk
выделяет метки, помогая мне легко их идентифицировать).
ОБНОВЛЕНИЕ: Благодаря ответу @ Энди ниже, мне удалось придумать сценарий оболочки, который делает все это удобно и безболезненно. Я делюсь этим сценарием на благо всех, и в частности, благодаря этому замечательному сообществу, которое сделало возможным переход на CVS для git:
#!/bin/sh
BRANCHNAME=$1
TAGNAME=$2
echo "Request to convert the branch ${BRANCHNAME} to a tag with the same name accepted."
echo "Processing..."
echo " "
git show-ref --verify --quiet refs/heads/${BRANCHNAME}
# $? == 0 means local branch with <branch-name> exists.
if [ $? == 0 ]; then
git checkout ${BRANCHNAME}
git tag ${BRANCHNAME}
git checkout master
git branch ${BRANCHNAME} -d
echo " "
echo "Updated list branches, sorted chronologically: "
echo "---------------------------------------------- "
git log --no-walk --date-order --oneline --decorate $(git rev-list --branches --no-walk) | cut -d "(" -f 2 | cut -d ")" -f 1
else
echo "Sorry. The branch ${BRANCHNAME} does NOT seem to exist. Exiting."
fi
3 ответа
Были ли отдельные разработки в этих отраслях? (пост, на который вы ссылались, похоже, не имеет разработки по этим веткам) Если бы не было разработки, вы могли бы:
- Оформить заказ в филиале
git checkout branchName
, - Отметьте это
git tag tagName
, - Вернитесь к мастеру
git checkout master
, - Наконец, удалите оригинальную ветку с помощью
git branch branchName -d
,
Это также можно сделать, если на ветке была разработка, но вам нужно будет использовать -D
вместо -d
, Я не профессионал, хотя и не уверен, что это "приемлемый" способ покинуть ветку.
Ответы даны в основном правильные.
Поскольку теги и ветви являются просто именами объектов, существует более простой способ, не касаясь текущей рабочей области:
git tag <name_for_tag> refs/heads/<branch_name> # or just git tag <name_for_tag> <branch_name>
git branch -d <branch_name>
Или даже сделать это на удаленном сервере, не затрагивая локальный репозиторий вообще:
git push origin origin/<branch_name>:refs/tags/<tag_name>
git push origin :refs/heads/<branch_name>
Согласно ответу Энди, я создал псевдоним, который также может быть использован для того же:
[alias]
branch2tag = "!sh -c 'set -e;git tag $1 refs/heads/$1;git branch -D $1' -"
использование
Если вы хотите преобразовать ветку bug-2483 в тег (тогда как ваша основная ветка master), напишите:
git branch2tag bug-2483 master
ОБНОВЛЕНИЕ 1
Изменено, чтобы отразить решение, предложенное kauppi.