Показать различия без слияния для двух коммитов в git - PullRequest
12 голосов
/ 28 декабря 2010

У меня есть два коммита, один из которых является предком другого. (Они оказываются начальной и конечной точками ветви. Не думаю, что это имеет значение, но я включу это, если это так).

Я хочу увидеть разницу между двумя коммитами, но исключая изменения, сделанные во время коммитов слияния (то есть всех коммитов с более чем одним родителем), которые были сделаны между двумя коммитами. (По сути, я хочу любой "настоящий" коммит, который был сделан в ветке, за исключением слияний.)

Возможно ли это? Если да, то как вы этого достигнете?

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

Ответы [ 3 ]

8 голосов
/ 28 декабря 2010

Ваш вопрос немного двусмысленный, но я думаю, что вы хотите этого.

git log --no-merges -p branch-start..branch-end
3 голосов
/ 08 августа 2016

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

Предполагается, что у вас есть дерево, подобное следующему:

         x---y-+-z-+-branch
        /     /   /
---a---b---c-+-d-+-e---master

, и вы хотите сравнить два коммита: b и branch,Затем вместо сравнения двух коммитов, запуск

git diff master...branch

покажет все изменения, сделанные в ветви (x,y,z), исключая все, что также находится в master (c,d,e, слияния).Обратите внимание, что это также игнорирует любые изменения, сделанные на master, которые еще не находятся в ветви.

Из документов:

git diff [--options] commit ... commit [-] […]

Эта форма предназначена для просмотра изменений в ветви, содержащей второй коммит и вплоть до него, начиная с общего предка обоих коммитов.«git diff A ... B» эквивалентно «git diff $ (git-merge-base AB) B».

2 голосов
/ 29 декабря 2010

Я не знал опций --no-merges -o, но здесь другое решение (я полагаю, что слияния были сделаны из master):

git checkout -b temp
git rebase --onto master branch-start branch-end
git diff master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...