Git écrase tous les commits dans la branche sans conflit
Un workflow de développement commun pour nous est de commander la branche b
, d'y commettre un tas, puis d'écraser tous ces commits en un (toujours sur b
).
Cependant, pendant le processus rebase -i
pour écraser tous les commits, il y a souvent des conflits à plusieurs étapes.
Je veux essentiellement modifier la branche en un commit qui représente l'état du référentiel au moment de la validation finale sur b
J'ai fait quelques recherches mais je n'ai pas trouvé exactement ce que je cherche. Je ne veux pas merge --squash
parce que nous aimerions tester la branche de fonctionnalité écrasée avant de fusionner.
2 réponses
Si vous n'avez pas besoin des informations de validation, vous pouvez simplement effectuer une réinitialisation logicielle. Ensuite, les fichiers restent tels qu'ils étaient et lorsque vous validez, ce commit sera au-dessus du commit que vous avez réinitialisé.
Pour trouver le commit à réinitialiser:
git merge-base HEAD BRANCH_YOU_BRANCHED_FROM
Puis
git reset --soft COMMIT_HASH
Puis re-craft le commit, peut-être:
git commit -am 'This is the new re-created one commit'
Ceci est similaire à la réponse de Rasmus mais décomposé en trois étapes qui devraient toujours fonctionner:
$ git merge feature1
$ git reset --soft HEAD@{1}
$ git commit -c feature1
Explication:
- fusionner et résoudre les conflits
- garder les changements mis en scène mais réinitialiser à l'ancienne tête
- validez toutes les modifications en utilisant le message de validation et l'auteur de la dernière validation de la branche de fonctionnalité