Git Diff не показывает достаточно - PullRequest
25 голосов
/ 10 марта 2011

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

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

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

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

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

Ответы [ 3 ]

122 голосов
/ 10 марта 2011

Важно понимать, что 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 в пользу версии в 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 написал (несколько трудно понять) сообщение в блоге о философии слияния , в которой это обсуждается.

6 голосов
/ 10 марта 2011

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

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

1 голос
/ 01 сентября 2016

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

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

  • featureBranch
  • masterBranch

Тем не менее, если вы сделаете git branch -a, вы сможете увидеть все ваших филиалов, локальные и удаленные .

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

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

Чтобы вы могли видеть различие, подобное тому, что вы видите в Github Pull Request, вы должны diff его с вашим remote branch.

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

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

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