From: "Eric Parent" <>
Sent: Sunday, June 17, 2012 2:12 PM

  I've been working on a branch, say '2.1' and made a few commits on
it. We've made a release and tagged the changeset at which the commit
was produced, say 'tag2.1'.

  Development continued and a few more commits were made on that
branch, the '2.1'.

  As the development goes, we think it would be a better idea to
create a branch '2.2' that starts at the tag where the release was
made and keep '2.1' only for the maintenance of that release.

So here's what we have at the moment:

branch 2.1 :  A   <-   B   <-   C   <-   D   <-   ...    <- K

Here is what we would like to have:

changesets C up to K to be on a branch 2.2 starting at 'tag2.1':

branch 2.1: A   <-   B
branch 2.2: <- C' <- D' <- E' <- ... <- K'

Any hints?

One option, for a small repo/team, is to rename branch 2.1 to branch 2.2, and then start a 'new' branch 2.1 from the tag 2.1.
This makes your local repo look like what you are wanting.

git branch (-m | -M) [<oldbranch>] <newbranch>
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]

However this does break history for any remeote repo, or work colleagues, so you would have to force update the remote repo and send colleagues a an apologetic update message.

You will want to ensure that the tracking is correct after your update, but it's not a problem.


I tried a few things like:

$ git checkout 2.1
$ git branch 2.2 'tag2.1'
$ git reset --hard 'tag2.1'

But that left me with an inconsistent repo...

$ git checkout 2.1
$ git branch tmp 'tag2.1'
$ git branch 2.2 'tag2.1'
$ git rebase --onti 2.2 tmp 2.1

But did not leave me with the expected result either.

Any hint is welcome.


- Eric

Eric Parent

You received this message because you are subscribed to the Google Groups "Git for 
human beings" group.
To post to this group, send email to
To unsubscribe from this group, send email to
For more options, visit this group at

Reply via email to