Итак, когда мы говорим (patch1 в некоторой ветви) = (patch2 в другой ветви), тогда их предки также должны быть одинаковыми?
Не для git rebase
,нет. Rebase использует те же вычисления, что и git patch-id
, что является просто результатом хеширования разборного текста (удалены номера строк и пробелы).
Команда git rev-list
также делает это. См. Параметры --left-right
, --right-only
, --cherry-mark
и --cherry-pick
, которые должны использоваться с селекторами фиксации симметричной разностной трехточечной нотации.
Фактически, git rebase
использует git rev-list
делать работу. В старые времена, когда git rebase
были в основном сценариями оболочки, было легко увидеть, как это было сделано. Теперь все это построено как код C, поэтому вместо запуска git rev-list
он содержит те же биты, что и git rev-list
, скомпилированные в нем.
... думал, что патч будет таким же, если то же самоесодержимое в той же строке ...
Нет, номера строк удаляются. Это сделано специально: например, патч может быть таким же простым, как замена вызова, передающего false
, на тот, который передает true
, что для Git:
- foo(false)
+ foo(true)
(с, вслучай git diff
, некоторый окружающий контекст - не ясно, включает ли ID патча контекст, но я предположил бы, что это делает). Предположим, что это исправление принято в восходящем направлении, пока вы работаете над функцией, которая может или не может быть связана с исправлением ... но в восходящем направлении , которая вызывает foo
,который был в строке 42, теперь в строке 47, потому что пять не связанных строк были добавлены намного выше этой точки?
Перебазировать следует и пропускает этот патч теперь, когда он существует в восходящем, к которому вы перебазируете,как определено путем выполнения --left-right
передачи по симметричной разности вышестоящего аргумента для rebase, и HEAD
. Все левые коммиты имеют свои идентификаторы патчей. Для всех правых коммитов рассчитано их идентификаторов патчей. Если идентификаторы патчей совпадают, фиксация считается дубликатом и исключается из набора коммитов для копирования.