Git diff не показывает достаточно

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

Это моя ситуация:

-*--*--*-----*<master>
  \     \     \
   1--*--*--*--2--*<feature>

Моя проблема заключается в том, что git diff master feature отображается только с номером фиксации 2. Я хочу видеть diff, который будет показывать запрос на github pull, который, я считаю, полностью подходит для совершения 1. Я заметил, что git cherry показывает мне, что я хочу видеть разницу.

Спасибо за любой совет.

Ответ 1

Важное значение для git diff A B заключается в том, что он только когда-либо показывает вам разницу между состояниями дерева между двумя точками в графе фиксации - он не заботится об истории. Обозначения .. и ..., используемые для git diff, имеют следующие значения:

An illustration of the different ways of specifying commits for git diff

Поэтому, когда вы запускаете git diff master feature, который не просто показывает вам изменение, внесенное коммитом, которое вы отметили как 2, на выходе должны отображаться точные различия между состоянием дерева, принятым в master, и состояние дерева, зафиксированное в feature. Если он не показывает вам более ранние изменения в ветки вашей функции, возможно, вы разрешили конфликты из более ранних слияний с мастером в пользу версии в master?

Как cebewee говорит, может быть, что вы хотите git log -p master..feature, так как git log заботится об истории. Значение .. и ... для git log отличается тем, что они выбирают диапазон коммитов:

An illustration of the different ways of specifying ranges of commits for git log

Кстати, часто говорят, что слияние с master в ветку темы - это не то, что нужно сделать - вместо этого вы должны перезагрузить или слить ветвь вашего тега в master после ее завершения. Это позволяет легко понять смысл ветки темы. Сторонник git сделал (несколько трудно понять) сообщение в блоге о о философии слияния, в которой говорится об этом.

Ответ 2

git diff master feature не показывает какой-либо из коммитов ', а текстовое различие между master и commits коммитов. Звучит так, как будто вы хотите видеть все коммиты из функции, которые еще не созданы? В этом случае попробуйте git log master..feature или git log -p master..feature, если вы хотите увидеть diffs тоже.

См. раздел УКАЗАНИЕ ДИАПАЗОНОВ в man git-rev-parse для объяснения синтаксиса "a..b".

Ответ 3

Я относительно новичок в git, но если я правильно понял ваш вопрос. Ваш вопрос связан с неправильным пониманием удаленных и локальных репозиториев и того, как они связаны друг с другом. Я помню, как только я это понял, все стало проще на 2 раза.

Вы думаете, что находитесь в этой ситуации ниже, где у вас есть только две ветки:

  • featureBranch
  • masterBranch

Однако, если вы выполните git branch -a, вы сможете увидеть все свои ветки, локальные и удаленные.

Итак, ваша реальная ситуация:

  • featureBranch
  • masterBranch
  • remoteBranch (ы)
  *---* <remote Master> which is behind your local
      \
      -*--*--*-----*<master> which is ahead of your remote/origin
       \     \     \
        1--*--*--*--2--*<feature>

Для того, чтобы вы могли видеть diff, подобный тому, что вы видите в Github Pull Request, вы должны diff его с помощью удаленного ветки.

git diff <local branch> <remote>/<remote branch>

См. сравнить локальную ветвь git с удаленной ветвью?