Dans mon projet, j'ai commencé avec pas mal de commits dans la branche master . Après quelques sorties, j'ai réalisé que l'approche que je prenais n'était peut-être pas du tout ce que nous voulions.
La nouvelle approche nécessitait une réécriture complète du code, j'ai donc décidé de commencer dans une branche orpheline ( a-new-begin-branch ). Je l'ai aimé et finalement, c'est devenu ma branche principale de facto. Maintenant, je veux remplacer master par a-new-starting .
J'ai trouvé comment faire de la branche Git actuelle un maître branche mais en suivant les étapes indiquées ici, j'obtiens le message d'erreur fatal: refus de fusionner des historiques non liés . Je sais que je pourrais utiliser l'option –allow-unrelated-histories mais je ne comprends pas vraiment ce qu'elle fait et je ne veux pas casser des choses.
J'ai également trouvé comment remplacer le branche principale avec une branche orpheline mais je ne souhaite pas supprimer l'historique de ma branche principale.
Dans l'idéal, j'aimerais finir avec une histoire linéaire, mais si ce n'est pas possible, je serai également satisfait d'une sorte de fusion.
Toutes les idées seront très appréciées!
3 Réponses :
Avez-vous essayé de rebaser votre maître dans votre nouvelle branche ?
1- $ git checkout a-new-begin-branch
2- $ git rebase master
Votre nouvelle branche contient désormais à la fois l'historique de la branche a-new-starting-branch et master
Je ne comprends pas pourquoi vous souhaitez conserver l'historique actuel de la branche master actuelle, avec votre a-new-begin .
Si vous l'objectif est juste d'avoir une branche nommée master avec l'historique de votre branche a-new-starting , vous pouvez le faire de cette façon:
git branch -m master master-backup git push origin :master master-backup git branch -m a-new-beginning master git push origin :a-new-beginning master
De cette façon, vous mettrez à jour les branches, localement et à distance.
Comme vous l'avez dit, vous pouvez utiliser Nous pouvons alors faire: La première fusion obtient un historique lié à la nouvelle branche avec l'ancien maître.
La deuxième fusion fait office de données de base pour les nouvelles données de branche. Vous pouvez vérifier que la fusion est correcte avec un --allow-unrelated-histories . Cette option permet de fusionner des données lorsqu'aucun commit n'est commun. Dans ce cas, comment faire de la branche git actuelle une discussion de branche principale a> semble être notre meilleure solution. git checkout better_branch
git merge --allow-unrelated-histories --strategy=ours master # keep the content of this branch, but record a merge
git checkout master
git merge better_branch # fast-forward master up to the merge
git diff master..better_branch ^ . La différence doit être vide.