Подтвердить что ты не робот

Git diff показывает только, что ревизия/ветвь A впереди ревизии/ветки B

Иногда у меня возникает следующая проблема:

  • Добавьте некоторые коммиты в ветки функции.

  • Обновить мастер из восходящего потока.

  • Хотите увидеть разницу между ветвью функций и мастером, но git diff master отображает все вещи, которые были добавлены/удалены в главном, когда я действительно хочу видеть только коммиты, впереди хозяина, а не тех, которые у него есть.

Есть ли способ сделать это без необходимости объединять мастер в ветки функции?

4b9b3361

Ответ 2

Я обычно иду за

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

Ответ 3

Ваш вопрос немного неясен, потому что я не уверен, что вы хотите увидеть 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.

Ответ 4

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

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`

Ответ 5

Неточный ответ, но один лайнер, который работает большую часть времени для моих нужд.

git difftool -d master..