I am about to complete a tedious process of converting \"dumb snapshots\" to git. This process has been going very well (thanks to this rename process), but now I realized that
The answers given are basically correct.
As tags and branches are just names for objects, there is a simpler way without touching current work area:
git tag <name_for_tag> refs/heads/<branch_name> # or just git tag <name_for_tag> <branch_name>
git branch -d <branch_name>
Or even do it to remote server without touching local repository at all:
git push origin origin/<branch_name>:refs/tags/<tag_name>
git push origin :refs/heads/<branch_name>
Per Andy's answer, I've made an alias that can also be used for the same thing:
[alias]
branch2tag = "!sh -c 'set -e;git tag $1 refs/heads/$1;git branch -D $1' -"
Usage
If you want to convert branch bug-2483 to a tag (while your main branch is master) write:
git branch2tag bug-2483 master
UPDATE 1
Changed to reflect the solution proposed by kauppi.
Was there separate development on these branches? (the post you linked to, doesn't appear to have development on those branches) If there was no development, you could:
git checkout branchName
.git tag tagName
. git checkout master
.git branch branchName -d
.This can also be done if there was development on the branch, but you will need to use -D
instead of -d
. I'm not a git pro though, so not sure if that is an "acceptable" way to leave a branch.