Git: Renomear o branch 'master'

Digamos que seu projeto vai ganhar uma reescrita, uma refatoração pesada, atualização do framework (rails 2 para rails 3) ou qualquer coisa que vá mudar o rumo do seu código de forma revolucionária. Enfim, cria-se um novo branch e começa a brincadeira. Neste tempo, seu master continua com atualizações, com correções de bugs, novos features, enfim, sua aplicação ainda está viva. Quando terminado o processo de refatoração, o merge com o branch principal, normalmente o master, acaba sendo uma dor de cabeça e a opção adotada algumas vezes é tornar o branch de refactoring no branch principal. Para este caso, vou explicar como renomear o branch de refactoring para o master e, claro, guardar o master para poder fazer ‘a caça as bruxas’ depois. Vou usar como base que estamos atualizando a versão do Rails 2 para Rails 3.

  1. Vá para um branch qualquer, se não tiver, crie um;

     $ git branch temp
     $ git checkout temp
    
  2. Renomear o branch master para rails2;

     $ git branch -m master rails2
    
  3. Renomear o branch de rails3 para o master;

     git branch -m rails3 master
    
  4. Remover o branch master remoto;

     $ git push origin :master
    
  5. Criar o branch master no repositório remoto;

     $ git push origin master:refs/heads/master
    
  6. Criar o branch rails2 no reposotório remoto;

     $ git push origin rails2:refs/heads/rails2
    
  7. Remover o branch rails3 no repositório remoto;

     $ git push origin :rails3
    

Pronto, teoricamente quando a galera fizer o git pull, pegará o novo branch, mas eu recomento que remova o branch master local de cada máquina e pegar novamente;

$ git branch temp
$ git checkout temp
$ git branch -d master
$ git checkout -b master origin/master

Fontes: * http://www.dmo.ca/blog/20080307124544/ * http://www.kernel.org/pub/software/scm/git/docs/git-branch.html * http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html * http://www.kernel.org/pub/software/scm/git/docs/git-push.html