Git diff не показывает достаточно
Я хочу видеть разницу между ведущей веткой и моей ветвью свойств. У меня много попыток от мастера к моей ветке свойств и хочу увидеть изменения, которые будут добавлены, если я объединил свою функцию в мастер.
Это моя ситуация:
-*--*--*-----*<master>
\ \ \
1--*--*--*--2--*<feature>
Моя проблема заключается в том, что git diff master feature
отображается только с номером фиксации 2. Я хочу видеть diff, который будет показывать запрос на github pull, который, я считаю, полностью подходит для совершения 1.
Я заметил, что git cherry
показывает мне, что я хочу видеть разницу.
Спасибо за любой совет.
Ответы
Ответ 1
Важное значение для git diff A B
заключается в том, что он только когда-либо показывает вам разницу между состояниями дерева между двумя точками в графе фиксации - он не заботится об истории. Обозначения ..
и ...
, используемые для git diff
, имеют следующие значения:
Поэтому, когда вы запускаете git diff master feature
, который не просто показывает вам изменение, внесенное коммитом, которое вы отметили как 2
, на выходе должны отображаться точные различия между состоянием дерева, принятым в master
, и состояние дерева, зафиксированное в feature
. Если он не показывает вам более ранние изменения в ветки вашей функции, возможно, вы разрешили конфликты из более ранних слияний с мастером в пользу версии в master
?
Как cebewee говорит, может быть, что вы хотите git log -p master..feature
, так как git log
заботится об истории. Значение ..
и ...
для 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 с удаленной ветвью?