2010-07-12 5 views
9

Je me demande, comment pourrais-je éviter un commit dans de très petits changements de code. Par exemple, il me manque parfois un espace entre les paramètres ou ce type de formatage de code minuscule. La raison pour laquelle je pose cette question est parce que plus tard je dois pousser mes commits vers un dépôt distant et je ne veux pas inclure ces petits changements.Comment éviter de petites modifications dans git?

Des idées? Merci

+2

Voir aussi http://stackoverflow.com/questions/2302736/trimming-git-checkins-squashing-git-history/2302947#2302947 pour les commandes de squash – VonC

+0

Vous pourriez également envisager d'ajouter un hook de pré-validation pour vous aider passez en revue votre style de codage. Avec cela, vous pouvez avoir git se plaindre si vous essayez de valider le code qui viole certaines normes que vous avez définies. Vous pouvez aider à prévenir les mauvais commits en premier lieu! L'exemple de hook de pré-validation ('.git/hooks/pre-commit.sample') recherche des choses comme des espaces après les lignes. Vous pouvez par exemple insérer un retrait GNU dans un script pour appliquer un style de codage spécifique et le placer dans votre hook de pré-validation. –

Répondre

20

Mise à jour: Comme d'autres l'ont fait remarquer, n'effectuez aucun rebasing ou réécriture d'historique de quelque sorte que ce soit si vous avez envoyé une origine distante et partagé ce code avec d'autres développeurs. Réponse courte: C'est dangereux et risqué!

Je vous recommande de vérifier la commande rebase pour cela. Il fait exactement ce que vous demandez

Qu'est-ce que cela ne se prend plus petits commits et de les combiner en plus grandes

Pour l'utiliser:

git rebase -i HEAD~5 

Votre éditeur pop avec les 5 derniers commits de la tête de la branche actuelle, avec de la documentation. Dans votre cas, vous voudrez utiliser squash. Le site que je l'explique lié très bien, ils ont cet exemple:

pick 01d1124 Adding license 
squash 6340aaa Moving license into its own file 
squash ebfd367 Jekyll has become self-aware. 
squash 30e0ccb Changed the tagline in the binary, too. 

Cela empaqueter les 3 précédents commits et les mettre tous sous celui que vous avez marqué comme pick. Vous pouvez ensuite modifier le message de validation et ainsi de suite.

Amusez-vous

+0

Pourquoi le downvote? – meagar

+0

+1. Squash est le chemin à parcourir. Plus d'informations ici: http: //www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html – Jeet

+2

Juste ce que vous faites, * ne le faites pas * si vous avez déjà poussé vos changements: S – andrewdotnich

16

La seule façon de faire une modification est avec un commit. Cependant, vous pouvez modifier un commit précédent pour inclure le nouveau changement si vous le souhaitez. Cela peut être la meilleure solution lorsque vous n'avez pas encore poussé le commit précédent vers un référentiel distant.

Il existe de bonnes informations sur la modification des validations git in the Git user's manual et in a blog post.

+0

Merci pour les liens. Cependant, je n'aime pas le style de liaison [clickhere]. Voici un bookmarklet utile pour générer des liens descriptifs: [Copier le lien markdown ou le modifier] (http://pastebin.com/qEafAErg) (lien pastebin) – takeshin

3

Une des meilleures façons d'aborder est d'utiliser difftool git pour lancer un outil visuel comme xdiff ou winmerge sur chaque fichier modifié avant de vous engager. Cela vous permet d'annuler facilement les changements mineurs et de détecter les changements importants que vous avez oubliés et qui ne sont pas prêts. J'attrape un bon nombre de bugs de cette façon. Par exemple, une balise html manquante ou supplémentaire peut être difficile à repérer lorsque vous regardez du code, mais elle est facile à repérer lorsque vous faites une diff.

+1

Y at-il une raison pour laquelle vous ne le feriez pas? t juste utiliser 'git diff'? C'est l'un de ses principaux objectifs ... – Cascabel

+0

@Jefromi, git diff ne me laisse pas éditer le code et inverser des parties de fichiers. En outre, je trouve beaucoup plus d'aide pour avoir un diff côte à côte du contenu du fichier complet m'aide à attraper les erreurs que je pourrais manquer avec une ligne par ligne diff (je ne serais pas surpris s'il y a une option pour cela, mais ça ne compenserait pas le manque d'édition) – mikerobi

+0

Avez-vous essayé git difftool? – bstpierre

Questions connexes