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 some of the branches that I created, do not merit a branch
but rather a tag
.
Since everything is still local (never pushed to a repository), I found this question (and associated answer) somewhat more cumbersome than I prefer, so I was wondering whether I can take a shortcut via some simple "convert-from-branch-to-tag" command?
Is there such a simple command to convert a branch to a tag?
(I know I can just leave it as is, but I really like the way gitk
highlights tags, helping me easily identify them).
UPDATE: Thanks to @Andy's answer below, I managed to come up with a shell script that does it all conveniently and painlessly. I am sharing this script for the benefit of all and as special thanks to this great community who made moving from CVS to git possible for me:
#!/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
When development on a branch reaches a particular stage, the changes are generally merged into the main line of development. For example, if your work on the new feature is stable, the changes in the branch can be merged to the trunk. Creating a tag is no different from creating a branch.
In order to create a Git tag for the last commit of your current checked out branch, use the “git tag” command with the tag name and specify “HEAD” as the commit to create the tag from. Similarly, if you want your tag to be annotated, you can still use the “-a” and “-m” options to annotate your tag.
To switch to a commit-like object, including single commits and tags, use git switch --detach <commitish> , where <commitish> is the tag name or commit number.
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>
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With