Слияние ветки с мастером, а затем перечисление всех файлов - PullRequest
1 голос
/ 26 декабря 2009

Скажем, я слил ветку с моей основной веткой, некоторое время работал над ней, а затем понял, что после слияния была введена некоторая ошибка.

Как я могу увидеть список файлов, которые были затронуты в результате слияния, а затем один за другим увидеть их различие?

Ответы [ 2 ]

2 голосов
/ 17 января 2010

git bisect, как предлагается в другом ответе, безусловно, очень полезно для отслеживания того, какой коммит привел к ошибке, и может очень быстро найти вашу проблему. Вполне возможно, что коммит слияния может быть виноват, однако, и в любом случае, возможно, прямой ответ на ваш вопрос может быть интересен.

Во-первых, вы должны найти имя объекта (т.е. сумму SHA1) интересующего вас коммита слияния, возможно, с git log --graph --pretty=oneline или gitk - скажем, имя объекта этого коммита слияния начинается с d8fa для этот пример.

В git коммиты определяются в виде полного снимка дерева, а не изменений в дереве, и это так же верно для слияний с двумя (или более) родителями, как и любой другой коммит. Итак, возможно, самый очевидный вопрос, который нужно задать о том, что было изменено коммитом слияния, это «что изменилось по отношению к каждому родителю этого слияния?» Вы можете ссылаться на первого родителя как d8fa^1, а второго родителя как d8fa^2, чтобы вы могли видеть, какие файлы изменились по отношению к каждому с помощью:

git diff --stat d8fa^1 d8fa

... и:

git diff --stat d8fa^2 d8fa

Или вы можете увидеть их обоих сразу:

git whatchanged -1 -m --stat d8fa

(Вы можете изменить --stat на -p, чтобы видеть полные различия вместо diffstat с git whatchanged, или просто пропустить --stat с git diff. Если вы просто хотите увидеть один файл diff против одного родителя, вы можете сделать git diff d8fa^1 d8fa -- README.txt, например.)

В большинстве случаев этот вывод, вероятно, не очень интересен - в основном это будут изменения, которые были внесены в одного из родителей, но не во втором. Тем не менее, также стоит проверить вывод git show d8fa - это будет показывать патч как часть его вывода, если были внесены изменения, внесенные слиянием, которые, кажется, не принадлежат ни одному из родителей, иногда известный как Слияние зла .

0 голосов
/ 26 декабря 2009

Лучше всего охарактеризовать ошибку в тесте, а затем использовать git bisect, чтобы сообщить, какие изменения привели к ошибке. Если вы не используете автоматическое тестирование, это будет сложнее (не так автоматизировано), но оно сообщит вам конкретные изменения, которые привели к ошибке.

Если предположить, что люди в вашем проекте хороши в сообщении небольших изменений (делает одно) и описательных (описывает, что это хорошо), то усилия, необходимые для точного определения того, что сломалось, тривиальны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...