git supprimer fusion de commettre de l'histoire
Mon Git histoire ressemble à ça :
Je voudrais squash, le violet s'engage en un seul. Je ne veux pas les voir à jamais dans mon journal de validation.
J'ai essayé de faire un git rebase -i 1
, mais même si 1
est sur le bleu de la branche (cf. de l'image), je les vois encore tous les commettre sur mon violet branche.
Comment puis-je supprimer complètement le violet de la branche (à partir du journal de validation) ?
- Est votre repo poussé partout que d'autres personnes ont tiré à partir d'elle?
- Les deux branches sont de nature purement locale.
Vous devez vous connecter pour publier un commentaire.
Ne
git rebase -i <sha before the branches diverged>
cela vous permettra de retirer la fusion s'engager et le journal d'une seule ligne comme vous le vouliez. Vous pouvez également supprimer tous les commits que vous ne voulez pas plus. La raison que votre rebase ne fonctionnait pas, c'est que vous n'allait pas suffisamment loin.AVERTISSEMENT:
Vous êtes à la réécriture de l'histoire en faisant cela. Cela, avec les modifications qui ont été poussés à une distance de pensions de l'origine de problèmes. Je recommande seulement le faire avec des commits qui sont locales.
git rebase
et elles seront supprimées.git push -f origin develop
En commençant par la mise en pension dans l'état d'origine
Pour supprimer la fusion s'engager et de squash de la branche en un seul s'engager dans la voie principale
Utiliser ces commandes (en remplacement de 5 et 1 avec le SHAs de la correspondante s'engage):
De conserver une fusion s'engager mais squash les livraisons de la branche en un seul:
Utiliser ces commandes (en remplacement de 5, 1 et C avec le SHAs de la correspondante s'engage):
Pour supprimer la fusion s'engager et de le remplacer avec de l'individu commits de la branche
Viens de faire (en remplacement de 5 avec le SHA de la validation correspondante):
Et enfin, pour supprimer la branche entièrement
Utiliser cette commande (en remplacement de C et de D avec le SHAs de la correspondante s'engage):
git rebase 5 master
cas, pourquoi il n'est pas "A B C 1 2 3 4 5 D ..." l'ordre?master
n'ont pas en commun avec5
et fait flac chacun sur le dessus de5
. La validation àC
ne fait pas partie de la lignée de5
, il est le premier à être déplacé sur le dessus de5
.git rebase C 5; git rebase 5 master
Il y a deux façons d'aborder ce basant sur ce que vous voulez:
Solution 1: Supprimer violet s'engage, à la préservation de l'histoire (au cas où vous voulez retourner)
-m 1
spécifie les parents de la ligne pour choisirViolet s'engage seront encore là dans l'histoire, mais puisque vous avez été rétrocédés, vous ne verrez pas de code à partir de ces validations.
Solution 2: supprimer Complètement pourpre s'engage (changement perturbateur si les pensions de titres sont partagés)
et delete (supprimer des lignes) correspondant à la pourpre s'engage.
Ce serait moins difficile si commet n'ont pas été faites après la fusion. Supplémentaires s'engage à augmenter les chances de conflits lors de la
revert/rebase
.1 - 1 = 0
. Mais si vous rebase le violet s'engage, que vous laissez derrière le revenue patch, sauf si vous rebase que trop. Si vous ne le faites pas, c'est comme l'application de-1
à votre histoire, pas0
, de sorte que vous allez laisser derrière vous des modifications que vous ne voulez pas.Seulement de Supprimer une Fusion de Commettre
Si tout ce que vous voulez faire est de supprimer un commit de fusion (2), de sorte que c'est comme cela n'est jamais arrivé, la commande est simplement comme suit
git rebase --onto <sha of 1> <sha of 2> <blue branch>
Et maintenant, le violet de la branche n'est pas dans le journal de validation de bleu à tous et vous avez deux branches distinctes de nouveau. Vous pouvez ensuite supprimer le violet de façon indépendante et de faire ce que d'autres manipulations que vous voulez sans la fusion s'engager dans la voie.