OK, voici le cas: p>
Il y a quelques années, de multiples modifications ont été apportées à plusieurs fichiers de notre codeBase et ont été commises à la fois. Quelque part dans ces changements cache un bug. Utilisation de Git Bisect, je suis rapidement capable de suivre le commit des coupables, mais le montant des changements de ce commettre m'a rendu un peu moins enthousiaste. P>
Trouver un mauvais commit est une brise avec git bisecte, mais une fois trouvé, quelle est la meilleure façon de suivre le changement unique qui a tout fait entier? Rétablir les fichiers affectés à leur version précédente, un par un? P>
3 Réponses :
Vous pouvez toujours créer une succursale qui commit, Divisez le COMMIS EN COMMIS EN COMMIS et procédez à la bisection de là. P>
Aussi, rappelez-vous que git bisect code> est juste un outil permettant de réduire le changement qui conduit au problème. Cela ne vous exonère pas d'avoir à analyser le problème, à localiser le bogue et à proposer une solution. P>
Merci. J'ai essayé la solution "Split le commit dans les commissions plus petites", mais j'ai perdu ma façon quelque part là-bas. Git noobs comme moi-même en avons vraiment besoin d'être énoncés pour eux.
@Johanfredrikvaren Il existe de nombreux tutoriels pour fractionnez un git de commettre, certains d'entre eux érigent les étapes en détail assez - juste les Google. Je suis simplement lié à celui qui semblait être un bon match.
Cela peut être assez fastidieux, sauf si vous comprenez très bien tous les changements qui se sont produits dans ce grand commit.
typiquement un très grand (mauvais grand) commettre implique de nombreux changements différents. Ce que vous devez faire est d'isoler tous ces changements conceptuellement et réécrivez des commits différents. P>
Je suggère de décomposer les changements selon ces 4 critères: P>
[nouveau] implique tout code relié à un Fonction de niveau technique identifiée individuellement (par opposition au niveau de l'utilisateur qui peut impliquer plus d'une fonction de niveau technique) p>
[RFG] Tout changement d'invariant comportemental. Préserve les comportements et les API exécutés (interfaces) p>
[CHG] implémentation de tout ce qui représente une modification de spécifications / exigences p>
[correction] toute modification pouvant changer de comportement pour le rendre conforme à celui-ci. Les intentions derrière la codage. P>
Ensuite, git-wise Voici ce que vous devez faire: p> Ceci créera une branche "coupable". Je garde toujours celui-ci comme référence que vous devrez peut-être effectuer de nombreuses ittérations fastidieuses des étapes suivantes. En tant que SidENOTE, gardant des références partielles en cours de route (en tant que branches ou tags). P> Cela annulera la validation comme si tous les changements de la commission ont été appliqués en tant que patch des modifications non planifiées dans la commission précédente. Ensuite, en utilisant p> Vous pouvez modifier un sous-ensemble de ces modifications. N'hésitez pas à utiliser l'option [S] Plit pour choisir de manière individuelle la ligne de modification par ligne. Parfois, vous ne pouvez pas éviter une édition à la main Choisissez les changements que vous souhaitez. Et se poser comme plusieurs commits décomposés dans le nouveau système de réparations de la RFG, CHG, je suggère et réécrivez autant de commits que vous le souhaitez. P> Soyez conscient de: P> ... parce que l'objectif est de faire des travaux de bidiction. En outre, assurez-vous que vos nouveaux commissions sont identiques à ceux de l'ancienne validation de GIT DIFF Le nouveau chef commet-t-il pour vous assurer que vous n'avez pas introduit de nouvelles modifications. P> C'est une douleur au début et nécessite beaucoup de pratique Mais une fois que vous devenez assez bien pour le faire, vous deviendrez un débogage de Dieu d'être adoré par toute votre équipe, puis vous pourrez déployer l'évangile de petits commits sous la forme de nouveaux, chg, rfg et correctif. P> p>
Comme il n'y avait que quelques fichiers dans le mauvais commit, j'ai choisi une façon un peu naïve d'y aller. Dessin de la réponse acceptée, c'est ce que j'ai fini par faire:
1) Préparez une version non planifiée du COMMIT: P>
add --patch <culprit filename>
Comme vous l'avez déjà signalé, il n'y a rien de plus que le contrôle de la source puisse faire pour vous. Vous demandez-vous simplement de demander "comment puis-je déboguer mon code?" Sans montrer du code américain ou même nous dire quelle langue vous écrivez?
C'est un exemple parfait de pourquoi les engagements devraient être petits, atomiques, des opérations avec des messages de validation clairs.
@Gareth: Non, je ne demande pas comment déboguer le code, le code actuel est donc hors de propos. Je demande la meilleure façon de réduire davantage un mauvais commit, en éliminant ses bons changements de la même manière que git bisiger. Les réponses données ci-dessous, je pense que cela montre très bien que le contrôle de la source peut en fait faire plus.
@JohanFredrikVaren: Vous pourrez peut-être créer un patch d'échec minimal à l'aide de Delta ( delta.tigris.org ). Vous auriez besoin de tester si vous appliquez que le correctif vous permet de passer des tests avant la validation et toujours échouer pour le bogue que vous avez trouvé maintenant. Minimiser ce patch devrait vous indiquer les changements défectueux.