2011-04-01 2 views
4

J'ai vu beaucoup d'articles de blog à propos de l'utilisation de git commit --amend, ou du rebasing sur les commits de squash. Je trouve qu'il est un peu plus facile de revenir au dernier point de contrôle (par exemple, avant tous mes microcrédits de 'save point'), puis d'utiliser l'ajout interactif pour choisir le meilleur ordre de commits.Commandes d'écrasement et de réorganisation

Y at-il un inconvénient à cela?
Je me demande b/c comme la plupart des blogs que j'ai lus utilisent modifient ou rebase à cet effet

Répondre

6

L'inconvénient est que vous choisissez à nouveau tous les fichiers individuels afin de les regrouper à nouveau dans les commits.

Si vos validations doivent être regroupées (sans avoir à ajouter ou supprimer des fichiers dans ces validations), alors un rebase --interactive est plus simple: vous raisonnez en terme d'ensemble de fichiers validés.
En fait, avec les bons commentaires de validation, un rebase --interactive --autosquash peut faire le réorganisation pour vous.

Si vos commits sont des points de sauvegarde purement intermédiaires, sans trop penser à leur composition en terme d'ensemble de fichiers, alors votre solution est adéquate.

+0

Merci Von! J'ai vu vos autres réponses et elles sont toutes excellentes, des conseils pointus – ambertch

3

Pour ajouter à ce que VonC a répondu, cela dépend du nombre de validations que vous avez également.

Ce qui me arrive le plus souvent est quelque chose comme ceci:

  • Les travaux sur A, commettre
  • travail sur B, commettent
  • Oh non! J'ai raté quelque chose d'important dans A, commets correction A

Avec un rebasage interactif, il est trivial de réorganiser puis écraser la correction dans le commit original pour A.

Un autre exemple est quand je veux juste reformuler un message de validation.

Encore un autre exemple est quand j'ai quelque chose comme ça

A-------------------master 
\ 
    B-----C-----D-----branch 

et je veux intégrer C & D mais pas B en maître. Je peux utiliser rebase pour réorganiser ma branche committe à C, D, B, puis git checkout master et git merge D

+0

Après avoir réorganisé les commits, comment puis-je faire la dernière étape de votre dernier exemple? Laisser B (maintenant le dernier commit) caché, et git fusionner la branche? – ambertch

+0

@ambertch, non, juste 'git merge D'. – Benjol

Questions connexes