On Fri, Aug 13, 2010 at 2:44 PM, David Bruce <davidstuartbr...@gmail.com> wrote:
> Hi,
> Along these lines, we are in a somewhat similar situation.  Basically,
> we have had a major feature branch for a GSoC project, and this branch
> has now substantially diverged from master.  However, the divergence
> is almost completely due to equivalent work that was done first in
> master, and then re-done "by hand" in the feature branch because it
> was too hard to merge (we are git noobs).  So, we want to make master
> point to the new branch, and rename master to something like
> old_master for safekeeping.  So it looks like we should first create a
> branch (or tag) to save the tip of master, and then hard reset master
> to the tip of the feature branch.

If it's just a local repository (probably not) you can just rename the
branches, I'll use the branch name dev_branch to stand in for your
feature branch:

git branch -m master old_master
git branch -m dev_branch master

If the branches are remote you should be able to rename and end up
with tracking branches with something like this:

First rename the current master branch

git push origin master:refs/heads/old_master
           Create the branch old_master in the origin repository by
copying the current master branch.
git fetch origin
           Fetch updates from the remote repository
git branch --track old_master origin/old_master
           create a tracking branch
git checkout old_master
git push origin :refs/heads/master
            Delete the remote master branch, remember that a branch is
just a pointer to a commit, and deleting it doesn't delete the commit
or any other commits
git branch -d master
            Delete the local master branch

Now rename the dev_branch to be the new master branch:
git checkout dev_branch
git push origin master:refs/heads/dev_branch
git fetch origin
git branch -track master origin/master
git checkout master
git push origin :refs/heads/dev_branch
git branch -d dev_branch

The last two steps (which delete the remote and local dev_branch are optional)

There may be more efficient ways to do this. I use the grb ruby gem to
handle tasks like this and this is how it approaches renaming a remote

Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Github: http://github.com/rubyredrick
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

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 git-us...@googlegroups.com.
To unsubscribe from this group, send email to 
For more options, visit this group at 

Reply via email to