64 votes

Comment écraser une branche dans Git avec master

J'ai une vieille branche de développement qui est complètement dépassée. Je ne veux pas la supprimer mais je veux remplacer entièrement son contenu par la branche master. Autrement dit, je veux que dev_branch = master

J'ai essayé :

git merge -s ours dev_branch

Mais ça n'a pas marché...

94voto

slhck Points 209720

Si vous voulez que tous les changements de master en dev_branch alors :

git checkout dev_branch
git reset --hard master

Cela ne fonctionne que si d'autres personnes n'ont pas cloné le référentiel.

Si tiene dev_branch poussé à une télécommande déjà, vous devez faire :

git push --force

Pour forcer l'accès à la télécommande. Avertissement : Cela va casser l'historique de la branche pour les personnes qui l'ont clonée auparavant ! Ensuite, d'autres personnes devront faire un git pull --rebase sur le dev_branch pour obtenir les changements.


Vous pouvez également renommer la branche de développement en quelque chose d'ancien, puis créer une nouvelle branche à partir de master portant le même nom :

git branch -m dev_branch old_dev_branch
git branch -m master dev_branch

Ou bien, utilisez le ours stratégie - je ne vois pas pourquoi ça ne marcherait pas pour vous :

git checkout master
git merge -s ours dev_branch
git checkout dev_branch
git merge master

1voto

vonbrand Points 2343

Pourquoi faire ça ? Vous pouvez supprimer la branche si elle n'est plus nécessaire (mais pourquoi ? Les branches ne coûtent presque rien). Ou vous pouvez la renommer :

git branch -m dev_branch obsolete_dev

Ou vous pouvez faire ceci pour le supprimer :

git branch -D dev_branch

Maintenant, créez une nouvelle branche à partir de master (en supposant que vous y êtes) :

git branch dev_branch

Voir git branch --help pour d'autres options (configuration des télécommandes et tout ce qui s'ensuit).

Si vous avez maintenant de nouvelles branches, vous devrez vous synchroniser avec les dépôts des pairs.

La meilleure façon d'éviter les tracas : Avoir une branche de développement "active", si elle devient obsolète, l'abandonner et en créer une nouvelle. Aucun historique n'est perdu de cette façon (ce qui pourrait s'avérer crucial à l'occasion).

Ayez par exemple une branche pour chaque version majeure, développez sur les branches de celles-ci pour corriger les bogues de la version, le maître va de l'avant. Utilisez cherry-pick et peut-être des fusions pour porter les corrections aux anciennes versions.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X