Ответ 1
Я думаю, правильный ответ - тройная точка
git diff master...feature
Это показывает только новые изменения в функции по отношению к мастеру. См. Также: git diff - показать только то, что нового на удаленном компьютере
Иногда у меня возникает следующая проблема:
Добавьте некоторые коммиты в ветки функции.
Обновить мастер из восходящего потока.
Хотите увидеть разницу между ветвью функций и мастером, но git diff master
отображает все вещи, которые были добавлены/удалены в главном, когда я действительно хочу видеть только коммиты, впереди хозяина, а не тех, которые у него есть.
Есть ли способ сделать это без необходимости объединять мастер в ветки функции?
Я думаю, правильный ответ - тройная точка
git diff master...feature
Это показывает только новые изменения в функции по отношению к мастеру. См. Также: git diff - показать только то, что нового на удаленном компьютере
Я обычно иду за
git log -p feature-branch --not master
Но если вы хотите diff, вы ищете
git diff <common-ancestor> master
где <common-ancestor>
является общим предком вашей ветки признака и мастера, с которой вы хотите сравнить. Вы можете использовать merge-base
, чтобы найти это для вас.
git diff `git merge-base feature-branch master` feature-branch
Ваш вопрос немного неясен, потому что я не уверен, что вы хотите увидеть diff/patch изменений между master
и feature
, или просто хотите увидеть, какие ветки содержат, которые фиксируют то, что другое ветвь не имеет.
Предполагая, что вы просто хотите увидеть, какие коммиты находятся в вашей ветке feature
, которые не существуют в master
(т.е. которые совершают в feature
, "впереди" master
), тогда вы можете сделать
$ git log --oneline --graph master..feature
Если вы хотите увидеть, как расходятся как master
, так и feature
, вы можете использовать эту команду:
$ git log --oneline --graph --first-parent \
--decorate --left-right master...feature
> 5bef654 (feature) A ...
> f7c65ea B ...
> fc66245 C ...
> 7435fc0 D ...
< bf68204 (master) X ...
< 0c10ed1 Y ...
< 27bb774 Z ...
Вышеприведенный вывод показывает, что в master
, которые не находятся в feature
с <
, перед ними (поскольку вы использовали master...feature
с мастером слева от команды <
), в feature
, которые не находятся в главном, отмечены >
, поскольку вы использовали feature
в правой части master...feature
. Тройные точки ...
в этом виде важны, не оставляйте их.
Вы можете узнать больше о том, как указать Commit Range из книги Pro Git.
Если я правильно понял ваш вопрос, ваша ветка функции отключена от ведущей ветки, и вы хотите увидеть различия между тем, что вы совершили в ветки функции, и тем, как выглядела главная ветка, когда вы от нее отделились.
A----B----C
\
D----E----F
В этом случае вы можете использовать команду git diff
с соответствующими хэшами коммитов. Итак, для ветки признака, которая разветвляется в точке A и впоследствии совершает D, E и F, вы можете сделать это:
git diff <hash of commit F> <hash of commit A>
Вы можете использовать git merge-base feature master
, чтобы увидеть хэш из точки A для использования выше, и git log
, чтобы увидеть хэш для вашего последнего фиксации F в ветки функции. Или для этого в одной строке используйте следующую команду:
git diff feature `git merge-base feature master`
Неточный ответ, но один лайнер, который работает большую часть времени для моих нужд.
git difftool -d master..