Question

Je flubbed mon histoire et que vous voulez faire quelques changements. Le problème est, j'ai un commettras avec deux changements non liés, et ce commit est entouré par d'autres changements dans mon histoire locale (non poussé).

Je veux partager cette avant de commettre le pousse, mais la plupart des guides que je vois ont à voir avec Éclatement les plus récents commettre, ou les changements locaux non engagés. Est-il possible de le faire à un commit qui est enterré dans l'histoire un peu, sans avoir à « re-faire » mon commits depuis?

Était-ce utile?

La solution

Il y a un guide commits de division dans le rebasage manpage. Le résumé est rapide:

  • Effectuer un rebasage interactif incluant la cible engager (par exemple git rebase -i <commit-to-split>^ branch) et le marquer à éditer.

  • Quand le cours de rebasage qui engagent, utilisez git reset HEAD^ pour rétablir avant que la livraison, mais gardez votre arbre de travail intact.

  • incrémentalement ajouter les changements et les engage, en faisant autant de commits comme vous le souhaitez. add -p peut être utile d'ajouter que certaines des modifications dans un fichier donné. Utilisez commit -c ORIG_HEAD si vous voulez réutiliser le message de commit original pour un certain commettre.

  • Si vous voulez tester ce que vous vous engagez (bonne idée!) L'utilisation git stash pour cacher la partie que vous avez commis (ou stash --keep-index avant de vous engager même le), test, git stash pop alors retourner repos à l'arbre de travail. Continuez à faire commits jusqu'à ce que vous obtenez toutes les modifications commises, à savoir un arbre de travail propre.

  • Exécuter git rebase --continue procéder application des commits après la validation maintenant divisée.

Autres conseils

Voici comment le faire avec Magit .

Dites commit ed417ae est celui que vous voulez changer; il contient deux changements non reliés et est enterré sous un ou plusieurs commits. Hit ll pour afficher le journal et accédez à ed417ae:

puis appuyez sur r pour ouvrir le menu contextuel de rebasage

et m pour modifier le commit au point.

Remarquez comment l'@ il est maintenant sur la commettras vous voulez diviser - cela signifie HEAD est maintenant à ce commettras:

Nous voulons déplacer la tête de la mère, donc naviguer à et entrez-à-dire le parent (47e18b3) et x hit (si vous utilisez magit-reset-quickly o, lié à evil-magit) « oui je voulais dire commettre au point ». Votre journal devrait ressembler à:

Maintenant, appuyez sur q pour accéder au statut de Magit régulière, puis utilisez la commande désindexer de u régulière pour désindexer ce qui ne va pas dans le premier engagement, engager c le reste comme d'habitude, puis stage et commit ce qui se passe dans la seconde engager, et lorsque vous avez terminé: succès r pour ouvrir le menu contextuel de rebasage

et un autre r de continuer, et vous avez terminé! ll affiche maintenant:

Pour diviser un commettras <commit> et ajoutez le nouveau commit avant celui-ci , et enregistrer la date auteur de <commit>, - les étapes suivantes:

  1. Modifier commit avant <commit>

    git rebase -i <commit>^^
    

    NB:. Peut-être il sera également nécessaire pour modifier <commit> et

  2. Cherry choisir <commit> dans l'index

    git cherry-pick -n <commit>
    
  3. reset interactivement changements inutiles de l'index et réinitialiser l'arbre de travail

    git reset -p && git checkout-index -f -a
    

    Comme solution de rechange, juste stash changements non nécessaires de manière interactive: git stash push -p -m "tmp other changes"

  4. Faire d'autres modifications (le cas échéant) et créer le nouveau commit

    git commit -m "upd something" .
    

    En option, répétez les articles 2-4 à ajouter commits intermédiaires.

  5. Continuer rebasage

    git rebase --continue
    

Si vous ne l'avez pas encore poussé, il suffit d'utiliser git rebase. Mieux encore, l'utilisation git rebase -i de se déplacer de manière interactive autour engage. Vous pouvez déplacer l'infraction engage à l'avant, puis le diviser comme vous aimez et déplacer les patches arrière (si nécessaire).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top