How to replace master branch in git, entirely, from another branch?

Possible Duplicate:
Change the current branch to master in git

I have two branches in my git repo:

  • master
  • seotweaks (created originally from master)
  • I created seotweaks with the intention of quickly merging it back into master , however that was 3 months ago and the code in this branch is 13 versions ahead of master , it has effectively become our working master branch as all the code in master is more or less obsolete now.

    Very bad practice I know, lesson learned.

    Do you know how I can replace all of the contents of the master branch with those in seotweaks ?

    I could just delete everything in master and merge, but this does not feel like best practice.


    You should be able to use the "ours" merge strategy to overwrite master with seotweaks like this:

    git checkout seotweaks
    git merge -s ours master
    git checkout master
    git merge seotweaks
    

    The result should be your master is now essentially seotweaks.

    ( -s ours is short for --strategy=ours )

    From the docs about the 'ours' strategy:

    This resolves any number of heads, but the resulting tree of the merge is always that of the current branch head, effectively ignoring all changes from all other branches. It is meant to be used to supersede old development history of side branches. Note that this is different from the -Xours option to the recursive merge strategy.


    What about using git branch -m to rename the master branch to another one, then rename seotweaks branch to master? Something like this:

    git branch -m master old-master
    git branch -m seotweaks master
    git push -f origin master
    

    This might remove commits in origin master , please check your origin master before running git push -f origin master .


    You can rename/remove master on remote, but this will be an issue if lots of people have based their work on the remote master branch and have pulled that branch in their local repo.
    That might not be the case here since everyone seems to be working on branch ' seotweaks '.

    In that case you can:
    git remote --show may not work. (Make a git remote show to check how your remote is declared within your local repo. I will assume ' origin ')
    (Regarding GitHub, house9 comments: "I had to do one additional step, click the ' Admin ' button on GitHub and set the ' Default Branch ' to something other than ' master ', then put it back afterwards")

    git branch -m master master-old  # rename master on local
    git push origin :master          # delete master on remote
    git push origin master-old       # create master-old on remote
    git checkout -b master seotweaks # create a new local master on top of seotweaks
    git push origin master           # create master on remote
    

    But again:

  • if other users try to pull while master is deleted on remote, their pulls will fail ("no such ref on remote")
  • when master is recreated on remote, a pull will attempt to merge that new master on their local (now old) master: lots of conflicts. They actually need to reset --hard their local master to the remote/master branch they will fetch, and forget about their current master.
  • 链接地址: http://www.djcxy.com/p/2770.html

    上一篇: 当我将其名称作为字符串时如何执行JavaScript函数

    下一篇: 如何从另一个分支完全替换git中的master分支?