479 votes

Combinant plusieurs validations avant de pousser dans Git

J’ai un tas de validations sur mon dépôt local qui sont thématiquement similaire. Je tiens à les combiner en une seule validation avant de pousser vers le haut à une distance. Comment puis-je le faire ? Je pense que `` cela, mais je ne peux pas donner un sens les docs.

746voto

Leopd Points 12652

Ce que vous voulez faire référence à "écraser" dans git. Il ya beaucoup d'options quand vous faites cela (trop nombreux?) mais si vous voulez juste pour fusionner tous vos unpushed s'engage dans un seul commettre, faire ceci:

git rebase -i origin/master

Cela permet d'ouvrir votre éditeur de texte (-i "interactive") avec un fichier qui ressemble à ça:

pick 16b5fcc Code in, tests not passing
pick c964dea Getting closer
pick 06cf8ee Something changed
pick 396b4a3 Tests pass
pick 9be7fdb Better comments
pick 7dba9cb All done

Changer tout l' pick de squash sauf le premier:

pick 16b5fcc Code in, tests not passing
squash c964dea Getting closer
squash 06cf8ee Something changed
squash 396b4a3 Tests pass
squash 9be7fdb Better comments
squash 7dba9cb All done

Enregistrez votre fichier et quittez votre éditeur. Puis un autre éditeur de texte s'ouvrira pour vous permettre de combiner les messages de validation de tous les commits dans un grand message de commit.

Voila! Googler "git écraser" vous donnera les explications de toutes les autres options disponibles.

118voto

Noich Points 1712

Si vous avez beaucoup de validations et que vous souhaitez uniquement squash le dernier X commet, trouver l’ID de validation de la validation à partir duquel vous souhaitez commencer à écraser et

Procédez comme décrit dans la réponse de leopd, modifier tous les la s de es sauf le premier.

34voto

Justin Weiss Points 752

Vous pouvez faire cela avec git rebase -i, passant dans la révision que vous souhaitez utiliser en tant que "root":

git rebase -i origin/master

ouvrir une fenêtre de l'éditeur indiquant tous les changements que vous avez fait depuis le dernier commit en origin/master. Vous pouvez rejeter les livraisons, les courges s'engage dans un seul commit, ou modifier précédente s'engage.

Il y a quelques ressources qui peuvent sans doute expliquer cela dans une meilleure façon, et de montrer quelques autres exemples:

http://book.git-scm.com/4_interactive_rebasing.html

et

http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

sont les deux premières bonnes pages que j'ai pu trouver.

2voto

Greg Hewgill Points 356191

Vous voudrez probablement utiliser Un rebasage interactif, qui est décrite en détail dans ce lien.

Vous trouverez d’autres bonnes ressources si vous recherchez « git rebase interactif ».

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X