Set master branch to latest tag

13,211

Solution 1

In this particular case, I had to do the following:

  1. First set the master branch to point to the latest tag (where HEAD is pointing), because it is the most recent tag. To do so I created a new branch and merged master to it.
git branch -b exp
git merge -s ours master
git checkout master
git merge exp

Now master is the same as latest tag:

v1.0    v1.1    v1.2
  |       |       |
  a   -   b   -   c
                  |
                 HEAD
                  |
                master
  1. Once we have master back in place, we need to push both master and tags whenever we do a new commit:
git commit -a -m "Commit msg"
git tag -a v1.4 -m "Tag msg"
git push master --tags

This way we avoid being in a Detached HEAD mode and the master branch is updated.

Solution 2

Various answers/comments already given about why to not do things this way, but here's how you fix this particular scenario:

git checkout -b tmpbranch       # creates a branch called tmpbranch at HEAD
git checkout master             # switch back to master branch
git merge --ff-only tmpbranch   # fast-forward merge master to tmpbranch, fail if not possible
git branch -d tmpbranch         # delete tmpbranch, it's not needed anymore

Then, going forward, don't check out a tag, except for this way:

git checkout -b somebranch refs/tags/tagname    # creates a new branch starting at tag

That way, you will not be in detached HEAD state, and any new commits will be added starting at the tag in question, which seems to be what you want... After making a commit you can git tag newtag to create additional tags at the right points.

Solution 3

A branch doesn't reference a tag.
A tag references a fixed commit.

So as long as you git checkout master, you are not in a detached HEAD mode.
You can then commit and tag: the tag will be created on the LATEST of the current branch.

If you were in a detached HEAD mode, see "Git: How can I reconcile detached HEAD with master/origin?" for various way of reconciling a detached commit with a branch.

Share:
13,211
Peter
Author by

Peter

Updated on June 17, 2022

Comments

  • Peter
    Peter almost 2 years

    This is an example of how my git repo is right now:

    v1.0    v1.1    v1.2
      |       |       |
      a   -   b   -   c
      |               |
    master           HEAD
    

    I usually commit, tag and push tags like this:

    git commit -a -m "Commit msg"
    git tag -a v1.3 -m "Tag msg"
    git push --tags
    

    The main problem I have is that the master branch doesn't move to the latest tag, so I'm always in a Detached HEAD state. Is there any way to fix this so the master branch will be always pointing to the latest pushed tag?