Possivel Duplicata:
Tornar o ramo Git actual um ramo principal
Eu tenho duas filiais no meu repositório Git:
master
)Eu criei seotweaks
com a intenção de fundi-lo rapidamente de volta em master
. No entanto, isso foi há três meses e o código neste ramo é 13 versões à frente do master
.
Tornou-se efectivamente o nosso ramo principal de trabalho, uma vez que todo o código no master
está mais ou menos obsoleto agora.
Muito má prática eu sei, lição aprendida.
Você sabe como eu posso substituir todo o conteúdo do ramo "mestre" por aqueles do ramo "sotweaks"?
Eu poderia simplesmente apagar tudo no master
e fundir, mas isso não parece ser a melhor prática.
Você deve ser capaz de usar a "nossa" estratégia de fusão para sobrescrever master com seotweaks como este:
git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks
O resultado deve ser que o seu mestre está agora essencialmente a fazer ajustes.
(-s our
é a abreviação de --estratégia=horas
)
Dos os documentos sobre a estratégia 'nossa':
Isto resolve qualquer número de cabeças, mas a árvore resultante da fusão é sempre a da cabeça do ramo atual, ignorando efetivamente todas as mudanças de todos os outros ramos. Ela deve ser usada para substituir a velha história de desenvolvimento dos ramos laterais. Note que isto é diferente da opção -Xours para a estratégia recursiva de fusão.
Atualização a partir dos comentários: Se você ficar fatal: refusing to merge unrelated histories', então mude a segunda linha para isto: git
merge --allow-unrelated-histories -s our master'.
Que tal usar git branch -m para renomear o ramo mestre para outro e depois renomear seotweaks branch para master? Algo parecido com isto:
git branch -m master old-master
git branch -m seotweaks master
git push -f origin master
Isso pode remover os commits no master de origem, por favor verifique seu master de origem antes de executar git push -f origin master
.
Você pode renomear/remover mestre em remoto, mas isso será um problema se muitas pessoas tiverem baseado seu trabalho na filial do mestre remoto e tiverem puxado essa filial em seu reporte local.
Isso pode não ser o caso aqui, já que todos parecem estar trabalhando em "ajustes" de ramo.
Nesse caso, você pode:
git remoto --show pode não funcionar.
(Faça um git remote show` para verificar como o seu controle remoto é declarado dentro do seu repo local. Eu assumirei 'origin')
(Sobre GitHub, casa9 comentários: "Eu tive que fazer um passo adicional, clicar no botão 'Admin' no GitHub e definir o 'Ramo Padrão' para algo diferente de 'master', e depois colocar de volta")
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
Mas novamente: