Mon histoire de Git ressemble à ça:
Je voudrais écraser le violet en un seul. Je ne veux plus les voir dans mon journal de validation.
J’ai essayé de faire un git rebase -i 1
, mais même si 1
est sur la twig bleue (cf. photo), je vois toujours chaque commit sur ma twig mauve.
Comment puis-je supprimer complètement la twig mauve (du journal de validation)?
Ne git rebase -i
cela vous permettra de supprimer la validation de fusion et le journal sera une seule ligne comme vous le souhaitez. Vous pouvez également supprimer tous les commits dont vous ne voulez plus. La raison pour laquelle votre rebase ne fonctionnait pas était que vous ne reveniez pas assez loin.
ATTENTION: Vous réécrivez l’historique en procédant de la sorte. Faire ceci avec des changements qui ont été poussés à un repo distant causera des problèmes. Je recommande de ne le faire qu’avec des commits locaux.
Commençant par le repo dans l’état d’origine
Pour supprimer la validation de la fusion et écraser la twig en un seul commit dans la ligne principale
Utilisez ces commandes (en remplaçant 5 et 1 par les SHA des validations correspondantes):
git checkout 5 git reset --soft 1 git commit --amend -m '1 2 3 4 5' git rebase HEAD master
Pour conserver une validation de fusion mais écraser la twig s’engage en une:
Utilisez ces commandes (en remplaçant 5, 1 et C par les SHA des commits correspondants):
git checkout -b tempbranch 5 git reset --soft 1 git commit --amend -m '1 2 3 4 5' git checkout C git merge --no-ff tempbranch git rebase HEAD master
Pour supprimer la validation de fusion et la remplacer par des validations individuelles de la twig
Il suffit de faire (en remplaçant 5 par le SHA du commit correspondant):
git rebase 5 master
Et enfin, pour supprimer complètement la twig
Utilisez cette commande (en remplaçant C et D par les SHA des validations correspondantes):
git rebase --onto CD~ master
Il y a deux façons de résoudre ce problème en fonction de ce que vous voulez:
Solution 1 : Supprimez les commits violets, en préservant l’historique (si vous souhaitez annuler)
git revert -m 1
-m 1
spécifie quelle ligne parent choisir
Les commits violets seront toujours présents dans l’histoire, mais depuis que vous avez annulé, vous ne verrez plus de code de ces commits.
Solution 2 : Supprimez complètement les commits mauves (modification perturbasortingce si le référentiel est partagé)
git rebase -i
et supprimer (supprimer des lignes) correspondant aux commits mauves.
Ce serait moins compliqué si les validations n’étaient pas effectuées après la fusion. Des commits supplémentaires augmentent les risques de conflits lors du revert/rebase
.
Si tout ce que vous voulez faire est de supprimer un commit de fusion (2) pour qu’il ne soit jamais arrivé, la commande est simplement la suivante:
git rebase --onto
Et maintenant, la twig mauve n’est plus dans le journal de validation du bleu et vous avez deux twigs séparées à nouveau. Vous pouvez ensuite écraser le violet indépendamment et faire les autres manipulations que vous voulez sans que la fusion soit validée.