Cela me arrive de temps en temps (bien, peut-être souvent):git changer commettras intermédiaire sans changer plus tard un
Remarque: Tous les événements suivants se produit avant que je pousse.
Mon projet logiciel nécessite une nouvelle fonctionnalité. Je code et teste jusqu'à ce que cela fonctionne. j'avais dû faire place à la nouvelle fonctionnalité, donc je diviser les changements en deux commits en utilisant git add -i
:
A --- R --- F
Commit R
apporte les modifications de refactorisation, F
ajoute le code pour la nouvelle fonctionnalité.
Maintenant, je me rends compte que j'ai fait des erreurs en divisant les changements, donc certains qui sont en F
appartiennent déjà à R
déjà, et vice versa. Donc, fondamentalement, R
est foiré et ne passe pas les tests (alors que l'état final de F
est parfait).
Pour résoudre ce problème, je vérifie R
sur une branche temporaire et corrige tout. Je git commit --amend
et maintenant je
A --- R --- F
\
\-- R'
Donc, tout ce qui manque est en train de passer F
à la nouvelle branche. Jusqu'ici, ma solution était de faire git rebase --onto R-prime R F
(j'utilise en fait les noms de branches, mais vous voyez ce que je veux dire). Le problème avec cela est que ce n'est pas exactement ce que je veux: git
comprend que je veux déplacer le change entre R
et F
sur R'
, me donner un commets F'
qui pourrait être différent de F
. Cependant, je veux F'
être exactement le même que F
, sauf pour son ancêtre. Souvent, le rebase
provoque des conflits qui sont difficiles à résoudre (c'est-à-dire sujets à des erreurs).
Est-il possible de dire git
que je veux déplacer le instantané de F
, pas la diff R
→ F
?
Je comprends ce qui se passe, mais ce n'est pas quelque chose que je ferais avant d'aller me coucher à minuit ... Merci quand même! – user189