Briser une précédente livraison en plusieurs commits

Sans la création d'une branche et de faire un tas de funky travailler sur une nouvelle branche, est-il possible de rompre un seul s'engager dans un certain nombre de différents s'engage après avoir été commis dans le dépôt local?

  • Une bonne source pour l'apprentissage de la façon de le faire est de Pro Git §6.4 Git Outils de Réécriture de l'Histoire, dans le "Fractionnement d'un Commit" section.
  • La documentation liée à l'observation ci-dessus sont excellents, et expliqué que les réponses ci-dessous.
  • Je suggère l'utilisation de cet alias stackoverflow.com/a/19267103/301717. Il permet de diviser une validation à l'aide de git autorebase split COMMIT_ID
  • Chose la plus facile à faire sans un rebase interactif est (probablement) pour créer une nouvelle branche de départ à la validation avant celui que vous voulez diviser, cherry-pick -n de la validation, de réinitialisation, de cachette, de commettre le déplacement de fichiers, réappliquer la cachette et de valider les modifications, puis fusion avec l'ancienne direction générale ou de choisir les commits qui ont suivi. (Puis passer l'ancien nom de la branche de l'actuel chef.) (C'est probablement mieux de suivre Mbo conseils et faire un rebase interactif.) (Copié à partir de 2010 réponse ci-dessous)
  • J'ai rencontré ce problème une fois j'ai accidentellement écrasé deux s'engage pendant un rebase dans un précédent commit. Ma façon de le fixer, il était à la caisse de la prévenue s'engager, git reset HEAD~, git stash, puis git cherry-pick le premier commit à l'intérieur de la courge, puis git stash pop. Mon cherry-pick cas est tout à fait spécifique ici, mais git stash et git stash pop est assez pratique pour les autres.
InformationsquelleAutor koblas | 2011-06-02