Possible Duplicate:
Faire de la branche Git actuelle une branche maître
J'ai deux branches dans mon dépôt Git :
master
seotweaks
(créée à l'origine de master
)J'ai créé seotweaks
avec l'intention de le fusionner rapidement dans master
. Cependant, c'était il y a trois mois et le code de cette branche a 13 versions d'avance sur master
.
Elle est effectivement devenue notre branche principale de travail car tout le code de master
est plus ou moins obsolète maintenant.
Très mauvaise pratique je sais, leçon apprise.
Savez-vous comment je peux remplacer tout le contenu de la branche master
par celui de seotweaks
?
Je pourrais simplement supprimer tout ce qui se trouve dans master
et fusionner, mais cela ne me semble pas être une bonne pratique.
Vous devriez être en mesure d'utiliser la stratégie de fusion "ours" ; pour écraser le master avec des seotweaks comme ceci :
git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks
Le résultat devrait être que votre master est maintenant essentiellement seotweaks.
(-s ours
est le diminutif de --strategy=ours
)
Extrait de [la docs][1] à propos de la stratégie 'ours' :
Cela résout un nombre quelconque de têtes, mais l'arbre résultant de la fusion est toujours celui de la tête de la branche actuelle, ignorant effectivement tous les changements de toutes les autres branches. Elle est destinée à être utilisée pour remplacer l'ancien historique de développement des branches latérales. Notez que ceci est différent de l'option -Xours de la stratégie de fusion récursive.
Mise à jour des commentaires : Si vous obtenez fatal : refusing to merge unrelated histories
, alors changez la deuxième ligne en ceci : git merge --allow-unrelated-histories -s ours master
Pourquoi ne pas utiliser git branch -m pour renommer la branche master en une autre, puis renommer la branche seotweaks en master ? Quelque chose comme ça :
git branch -m master old-master
git branch -m seotweaks master
git push -f origin master
Ceci pourrait supprimer des commits dans origin master, veuillez vérifier votre origin master avant de lancer git push -f origin master
.
Vous pouvez renommer/supprimer master à distance, mais cela posera un problème si beaucoup de personnes ont basé leur travail sur la branche master à distance et ont tiré cette branche dans leur repo local.
Cela pourrait ne pas être le cas ici puisque tout le monde semble travailler sur la branche 'seotweaks
' ;.
Dans ce cas, vous pouvez :
git remote --show peut ne pas fonctionner.
(Faites un [git remote show
][1] pour vérifier comment votre remote est déclaré dans votre repo local. Je vais supposer 'origin
' ;)
(Concernant GitHub, [house9][2] commente : "J'ai dû faire une étape supplémentaire, cliquer sur le bouton 'Admin
' ; sur GitHub et définir la 'Default Branch
' ; sur autre chose que 'master
' ;, puis la remettre ensuite" ;)
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
Mais encore une fois :
si d'autres utilisateurs essaient de tirer alors que le master est supprimé sur le serveur distant, leurs tirages échoueront ("no such ref on remote" ;)
lorsque le master est recréé sur le serveur distant, un pull tentera de fusionner ce nouveau master avec son master local (maintenant ancien) : beaucoup de conflits. Ils doivent en fait reset --hard
leur master local sur la branche du master distant qu'ils vont récupérer, et oublier leur master actuel.
[1] : http://www.kernel.org/pub/software/scm/git/docs/git-remote.html [2] : https://stackoverflow.com/users/317989/house9