Duplicate possible:
Transforme la branche Git actuelle en branche master
J'ai deux branches dans mon référentiel Git:
master
seotweaks
(créé à partir 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 dans cette branche compte 13 versions d'avance sur master
.
Il est effectivement devenu notre branche principale de travail car tout le code dans master
est maintenant plus ou moins obsolète.
Très mauvaise pratique je sais, leçon apprise.
Savez-vous comment je peux remplacer tout le contenu de la branche master
par ceux de seotweaks
?
Je pourrais simplement tout supprimer dans master
et fusionner, mais cela ne semble pas être la meilleure pratique.
Vous devriez pouvoir utiliser la stratégie de fusion "la nôtre" pour écraser maître avec seotweaks comme ceci:
git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks
Le résultat devrait être votre maître est maintenant essentiellement seotweaks.
(-s ours
est l'abréviation de --strategy=ours
)
De les docs à propos de la stratégie 'la nôtre':
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 branche actuelle, ignorant ainsi toutes les modifications de toutes les autres branches. Il est destiné à être utilisé pour remplacer l’ancienne histoire de développement des branches latérales. Notez que cela diffère de l'option -Xours de la stratégie de fusion récursive.
Pourquoi ne pas utiliser git branch -m pour renommer la branche master en une autre, puis renommer 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 les validations dans le maître d'origine, vérifiez votre maître d'origine avant d'exécuter git Push -f Origin master
.
Vous pouvez renommer/supprimer le maître sur distant, mais cela posera un problème si de nombreuses personnes ont basé leur travail sur la branche principale distante et ont extrait cette branche dans leur référentiel local.
Ce n'est peut-être pas 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
pour vérifier comment votre télécommande est déclarée dans votre référentiel local. Je supposerai 'Origin
')
(En ce qui concerne GitHub, house9 commente: "Je devais effectuer une étape supplémentaire, cliquer sur le bouton 'Admin
' sur GitHub et régler le '_Default Branch
_' à quelque chose d'autre que 'master
', puis remettez-le après ")
_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:
reset --hard
_ passer leur maître local à la branche distante/maître qu'ils vont récupérer et oublier leur maître actuel.Puisque seotweaks
a été créé à l'origine sous la forme d'une branche de master
, sa fusion est une bonne idée. Cependant, si vous êtes dans une situation où l’une de vos branches n’est pas vraiment une branche de master
ou si votre histoire est si différente que vous voulez simplement effacer la branche master
au profit de la nouvelle branche que vous souhaitez. 'ai fait le travail sur vous pouvez faire ceci:
git Push [-f] Origin seotweaks:master
Ceci est particulièrement utile si vous obtenez cette erreur:
! [remote rejected] master (deletion of the current branch prohibited)
Et vous n'utilisez pas GitHub et n'avez pas accès à l'onglet "Administration" pour changer la branche par défaut de votre référentiel distant. De plus, cela ne causera pas de temps mort ni de conditions de course que vous pourriez rencontrer en supprimant master:
git Push Origin :master
J'ai trouvé que c'était le meilleur moyen de le faire (un problème avec mon serveur ne me permettait pas de le supprimer).
Sur le serveur qui héberge le référentiel Origin
, tapez ce qui suit dans un répertoire du référentiel:
git config receive.denyDeleteCurrent ignore
Sur votre poste de travail:
git branch -m master vabandoned # Rename master on local
git branch -m newBranch master # Locally rename branch newBranch to master
git Push Origin :master # Delete the remote's master
git Push Origin master:refs/heads/master # Push the new master to the remote
git Push Origin abandoned:refs/heads/abandoned # Push the old master to the remote
Retour sur le serveur qui héberge le référentiel Origin
:
git config receive.denyDeleteCurrent true
Crédit à l'auteur de l'article de blog http://www.mslinn.com/blog/?p=772