Какова разница в коммите слияния, отображаемая на GitHub? - PullRequest
0 голосов
/ 28 июня 2018

Рассмотрим следующую страницу фиксации:

https://github.com/SignalR/SignalR/commit/cc5b002a5140e2d60184de42554a8737981c846c

Как правило, в Git коммит - это набор изменений, примененных поверх предыдущей кодовой базы, поэтому, учитывая следующее дерево:

enter image description here

Просмотр различий 1ca1b6b покажет кодовую базу с ca2cac9 слева, а изменения, внесенные в этот коммит справа. С коммитом слияния, что мы видим с левой стороны? то есть с учетом следующего дерева:

enter image description here

Если мы просмотрим коммит 1e25f98 на GitHub, что будет слева? 06f5be1? А что с более сложным деревом? Или слияние трех ветвей? Это просто показывает разницу между последней общей точкой в ​​истории?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

ответ petrpulc является правильным по существу, и я проголосовал за него, но специально для того, чтобы обратиться к GitHub, GitHub делает для того, чтобы показать эту разницу, - полностью игнорировать второго родителя.

Вы можете увидеть тот же diff в командной строке, используя:

git log -p --no-walk --first-parent -m cc5b002a5140e2d60184de42554a8737981c846c

или, проще:

git show --first-parent cc5b002a5140e2d60184de42554a8737981c846c

(Нам нужен --no-walk в git log, чтобы Git не смотрел больше коммитов, в то время как git show подразумевает это. Нам нужен --first-parent, чтобы Git смотрел только на первого родителя, а для git log нам нужно -m или -c или --cc, чтобы заставить git log показывать патч, так как -p обычно пропускает показ патчей для слияний, даже если мы используем --first-parent, чтобы обрезать оставшихся родителей. )

0 голосов
/ 28 июня 2018

Git коммиты - это, по сути, снимки

... из-за этого вам нужно указать два коммита, чтобы сделать diff из. Например. git diff HEAD^ HEAD. Второе задание установлено в HEAD, если не указано.

Но да, например, git log -p показывает патч относительно первого родителя , чтобы упростить задачу. И GitHub / Lab ведет себя точно так же.

Родители заказаны

И первый родитель коммит слияния указывает на коммит, на котором вы стояли до вызова git merge. (Где была ваша ГОЛОВА.)

По умолчанию первый родитель всегда берется. Например, HEAD^ является первым родителем HEAD (на втором изображении 6f01964), HEAD~2 является первым родителем первого родителя HEAD (2bb48b5). Это может быть изменено на ^<number>, поэтому HEAD^2 является вторым родителем HEAD, таким образом, b0417C3.

...