Je travaille sur une branche de fonctionnalité.
Ainsi, l'historique des validations actuel ressemble à ceci. De l'actuel à l'ancien:
Comment puis-je écraser au-dessus de 3 commits en 1 avant de fusionner ma branche de fonctionnalité en master?
Vous pouvez rebase -i
En commençant par le parent de commit 2
(C'est-à-dire la validation sur master
à partir de laquelle vous avez créé une branche. Vous devrez probablement résoudre à nouveau les conflits lorsque vous obtiendrez au commit de fusion.
Donc, si votre histoire ressemble
* D commit 3 (HEAD)
* M merge
/|
| * C commit 2
* | B commit on master
|/
* A (master)
Commencez avec git rebase -i A
. Vous verrez une liste de validations comprenant à la fois master
et your_branch
, Mais pas la validation de fusion. pick
le premier (B
ou C
, selon le moment) et squash
le reste.
Dans mon cas, j'ai commencé à travailler avec une branche qui avait plusieurs validations, puis une fusion avec la branche principale/source, puis plus de validations et je voulais supprimer toutes les validations, mais je continuais à rencontrer une erreur en raison de la validation de fusion:
erreur: commit est une fusion mais aucune option -m n'a été donnée.
-> C1-> C2-> M (fusion avec la branche source) -> C3-> C4
Il y a probablement une meilleure façon (et j'ai hâte d'apprendre), mais ce que j'ai fini par faire après beaucoup de lecture et d'essais et d'erreurs a été de créer une branche de copie pour référence, puis de rétablir la branche actuelle en C1,
reset --hard (hachage C1)
puis cerise-cueillette C2, C3, C4, puis écrasement, puis rebasage ... résultant en:
M-> C
(juste un commit qui a été rebasé avec la source!)
J'espère que cela aide quelqu'un d'autre avec le même problème.