Question Comment remplacer la branche principale dans git, entièrement, d'une autre branche? [dupliquer]


Dupliquer possible:
Changer la branche actuelle en master dans git 

J'ai deux branches dans mon repo git:

  1. maîtriser
  2. seotweaks (créé à l'origine du maître)

j'ai crée seotweaks avec l'intention de le fusionner rapidement en master, mais il y a 3 mois et le code dans cette branche est 13 versions en avance sur master, il est effectivement devenu notre branche maîtresse de travail comme tout le code dans 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 master branche avec ceux de seotweaks?

Je pourrais juste supprimer tout dans master et fusionner, mais cela ne semble pas être la meilleure pratique.


1285
2018-05-19 03:06


origine


Réponses:


Vous devriez être capable d'utiliser la stratégie de fusion "nôtre" pour remplacer master 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 seweaks.

(-s ours est court pour --strategy=ours)

De les docs à propos de la stratégie «nôtre»:

Ceci résout n'importe quel nombre de têtes, mais l'arbre résultant de la fusion est toujours celui de la tête de branche courante, en ignorant effectivement tous les changements de toutes les autres branches. Il est destiné à être utilisé pour remplacer l'ancienne histoire 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.


2238
2018-05-19 04:51



Qu'en est-il de l'utilisation de 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

Cela peut supprimer des validations dans le maître d'origine, s'il vous plaît vérifier votre maître d'origine avant de courir git push -f origin master.


370
2018-05-19 03:11



Vous pouvez renommer / supprimer le maître sur la télécommande, mais cela posera un problème si beaucoup de personnes ont basé leur travail sur la branche maître distante et ont retiré cette branche dans leur dépôt 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. (Faire un git remote show pour vérifier comment votre télécommande est déclarée dans votre dépôt local. Je vais supposer 'origin')
(En ce qui concerne GitHub, maison9 commentaires: "Je devais faire une étape supplémentaire, cliquez sur le 'Admin'bouton sur GitHub et régler le'Default Branch'à quelque chose d'autre que'master', puis le remettre 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:

  • si d'autres utilisateurs essaient de tirer pendant que le master est supprimé sur la télécommande, leurs tirages échoueront ("no such ref on remote")
  • Quand master est recréé sur remote, un pull essayera de fusionner ce nouveau master sur leur maître local (maintenant vieux): beaucoup de conflits. Ils ont vraiment besoin de reset --hard leur maître local à la branche distante / master qu'ils iront chercher, et oublient leur maître actuel.

61
2018-05-19 03:57



Puisque seotweaks a été créé à l'origine comme une branche de maître, la 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 du maître ou si votre histoire est si différente que vous voulez juste oblitérer la branche principale en faveur de la nouvelle branche que vous avez fait le travail sur vous peut le faire:

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 pour votre repo distant. en outre, cela ne causera pas de temps d'arrêt ou de conditions de course que vous pourriez rencontrer en supprimant le maître:

git push origin :master

21
2017-07-25 20:44



J'ai trouvé que c'était la meilleure façon de le faire (j'ai eu un problème avec mon serveur ne me laissant pas supprimer)

Sur le serveur qui héberge le référentiel d'origine, tapez ce qui suit à partir d'un répertoire situé dans le 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 d'origine:

git config receive.denyDeleteCurrent true

crédit à l'auteur de cette page

http://www.mslinn.com/blog/?p=772


1
2017-09-28 13:13