2009-12-26 7 views
1

Dites que j'ai fusionné une branche avec ma branche principale, que j'ai travaillé dessus pendant un certain temps, puis j'ai réalisé qu'un bug a été introduit après la fusion.Fusion d'une branche avec master, puis affichage de tous les fichiers

Comment puis-je voir une liste de fichiers qui ont été affectés dans la fusion, puis un par un voir un diff d'entre eux?

+1

Peut-être que les réponses à cette question pourraient vous aider? http://stackoverflow.com/questions/424071/how-do-i-list-all-the-files-for-a-commit-in-git – Makis

Répondre

2

git bisect, comme suggéré dans l'autre réponse, est certainement très utile pour rechercher quel commit a introduit un bug, et peut très bien trouver votre problème très rapidement. Cependant, il est possible que le commit de fusion soit le coupable, et dans tous les cas, une réponse directe à votre question pourrait être intéressante.

Tout d'abord, vous devez trouver le nom de l'objet (à savoir la somme SHA1) de la fusion engager qui vous intéresse, peut-être avec git log --graph --pretty=oneline ou gitk - disons que cette fusion engage son nom objet commence par d8fa pour cet exemple.

Dans git, les commits sont définis en termes d'instantané complet de l'arbre plutôt que de modifications apportées à l'arbre, et ceci est vrai pour les fusions avec deux parents (ou plus) comme tout autre commit. Donc, peut-être la question la plus évidente à poser sur ce qui a été changé par un commit de fusion est "qu'est-ce qui a changé par rapport à chaque parent de cette fusion?" Vous pouvez vous référer au premier parent comme d8fa^1 et le second parent comme d8fa^2 afin que vous puissiez voir quels fichiers modifiés par rapport à chacun:

git diff --stat d8fa^1 d8fa 

... et:

git diff --stat d8fa^2 d8fa 

Ou vous pouvez voir ces deux en une seule fois avec:

git whatchanged -1 -m --stat d8fa 

(Vous pouvez changer --stat--p pour voir tous les diffs au lieu du diffstat wi e git whatchanged, ou laissez simplement de côté le --stat avec git diff. Si vous voulez juste voir le diff d'un seul fichier par rapport à un parent, vous pouvez faire git diff d8fa^1 d8fa -- README.txt, par exemple.)

Dans la plupart des cas, cette sortie n'est probablement pas très intéressante - ce seront principalement des changements qui ont été introduits dans un parent mais pas l'autre. Cependant, il vaut également la peine de vérifier la sortie de git show d8fa - cela affichera seulement un patch dans le cadre de sa sortie s'il y avait des changements introduits par la fusion qui ne semblaient pas être dans l'un ou l'autre parent, parfois connu comme evil merge.

0

Votre meilleur pari est de caractériser le bug dans un test et ensuite utiliser git bisect pour vous dire quel changement a introduit le bogue. Si vous n'utilisez pas les tests automatisés, ce sera plus difficile (ce ne sera pas aussi automatisé), mais cela vous indiquera le changement spécifique qui a introduit le bogue. En supposant que les personnes de votre projet sont douées pour communiquer des changements qui sont petits (fait une chose) et descriptifs (décrit ce qu'est une chose), l'effort requis pour comprendre exactement ce qui est cassé est trivial.

Questions connexes