2009-08-11 5 views
0

Mes commits git sont un peu foiré et je me demandais si je pouvais les écraser tous ensemble et ensuite "extraire" certains commits de ce commit.Git: squash tout puis "extrait" certains commits

Disons que j'ai ces fichiers dans un commit: upload.py, moderate.py, Upload.html, moderaion.html

Comment puis-je le diviser en deux commits comme celui-ci? téléchargement: upload.py, Upload.html

modération: moderate.py, moderaion.html

Répondre

1

Votre question implique que les commits sont déjà en désordre, mais si les commits eux-mêmes sont 'atomiques' mais juste dans le mauvais ordre, vous pouvez également utiliser git rebase --interactive pour les mettre dans le bon ordre et les écraser. Cela pourrait rendre les choses plus faciles pour vous.

Si les validations touchent déjà plusieurs zones et que vous souhaitez les séparer, git rebase -i peut vous aider. Jetez aussi un coup d'oeil à l'exemple au Bart's blog.

+0

Le blog avait toutes les réponses. Merci – Cedric

2

D'abord, vous pouvez écraser tous les commits avec git rebase --interactive X (où X est le parent des commits vous voulez couronner). Après cela, exécutez git rebase --interactive X une deuxième fois, mais divisez maintenant le commit écrasé comme décrit dans git-rebase's manual.

Avant de commencer à rebaser, il est préférable de marquer la validation de tête actuelle. Notez son hash ou créez un nouveau tag/branche. De cette façon, vous pouvez facilement annuler toutes vos modifications et réessayer.

+0

Pas besoin d'étiqueter ou d'écrire un hachage maintenant qu'il y a une réinitialisation par défaut (HEAD @ {1}, @ {1}, etc.) –

+2

True. Mais c'est plus facile quand vous n'avez pas besoin de savoir si c'était @ {1}, @ {2} ou autre chose après avoir fait beaucoup d'opérations qui modifient la tête. –

Questions connexes