comment utiliser git rebase pour nettoyer une histoire alambiquée
Après avoir travaillé pendant plusieurs semaines avec une demi-douzaine de différentes branches et se confond, à la fois sur mon portable de travail et de mon bureau à la maison, mon histoire a obtenu un peu compliquée. Par exemple, je viens de faire une extraction, puis a fusionné maître avec origin/master. Maintenant, quand je fais git show-branches, la sortie ressemble à ceci:
! [login] a Changé de nom de domaine. ! [master] de Fusion branche distante 'origin/master' ! [migrer-1.9] Migration vers 1.9.1 sur Heroku ! [rebase-maître] de Fusion branche distante 'origin/master' ---- - - [master] de Fusion branche distante 'origin/master' + + [maître^2] Un peu de réorganisation et de nettoyage. - - [master^2^] Fusion de la branche 'rpx-login" + + [maître^2^^2], a Commenté certaines de journalisation de débogage. + + [maître^2^^2^] Singe-patché Rack::Demande n ° ip + + [maître^2^^2~2] dump chaque demande pour ouvrir une session ....
Je voudrais nettoyer avec un git rebase. J'ai créé une nouvelle branche, rebase-maître, à cette fin, et sur cette branche essayé git rebase <commun ancêtre>. Cependant, j'ai à résoudre de nombreux conflits, et le résultat final sur la branche git rebase-maître ne correspond plus à la version correspondante sur le maître, qui a déjà été testé et fonctionne!
J'ai pensé que j'ai vu une solution à cela quelque part, mais ne peut pas trouver plus. Personne ne sait comment faire cela? Ou ces alambiqué ref noms aller loin quand j'ai commencer la suppression de l'onu nécessaire branches que j'ai déjà fusionné avec?
Je suis le seul développeur sur ce projet, donc il n'y a personne d'autre qui en sera affecté.
OriginalL'auteur Lawrence I. Siden | 2010-06-11
Vous devez vous connecter pour publier un commentaire.
La meilleure façon de nettoyer une histoire alambiquée est de garder l'histoire linéaire. Vous le faire en évitant toute forme de fusion, autres que l'avance rapide.
Le flux de travail va comme ceci.
Quand il est temps d'intégrer la branche en maître, ne fusionnent pas. Au lieu de cela, rebase cette branche contre le maître. Qui fera la branche de ne plus ressembler à une branche, mais simplement plus de croissance sur le haut de l'arbre. Vous résoudre tous les conflits de fusion au cours de la rebase.
Maintenant, la fusion de la direction générale en maître. Ce sera une avance rapide de fusion.
Et maintenant pousser le travail en amont.
OriginalL'auteur Wayne Conrad
Le processus normal de repos où vous pouvez forcer pousser une branche (en remplacement de la télécommande de l'histoire par un nouveau créés localement par un rebase), est à faire:
Mais encore une fois, c'est uniquement valide si vous êtes le seul à tirer à partir de votre repos, et même alors, vous devez réinitialiser certains de vos branches locales de la nouvelle télécommande suivi de ceux qui ont été réécrits.
De rebase session, vous pouvez le parage Git s'engage et squash de l'histoire, afin d'obtenir le genre d'histoire dont vous avez besoin.
euh... c'est beaucoup valide sans tirer à partir de la télécommande. vous pouvez facilement rebase -i <s'engager à-ish> (ou en fait à peu près tout) de la section locale, à distance, de s'engager.
OriginalL'auteur VonC