Ответ VonC дает историю.Механизм - это то, что Git называет идентификатором патча .Концепция идентификатора патча в Git задокументирована (хотя и слегка) в git patch-id
справочной странице , обобщив ее следующим образом:
... вы можете использовать эту вещь, чтобы посмотретьдля вероятных дублирующих фиксаций.
Это то, что git rev-list --cherry-mark
(с симметричной разностью ...
запись) и git format-patch --ignore-if-in-upstream
(с простой операцией исключения ..
) делают для обнаружения дублирующих фиксаций.Если коммит, чей хеш по определению отличается от коммита (по крайней мере, потенциально) для копирования, имеет тот же ID патча , что и коммит, который будет скопирован, Git предполагает, что коммит уже скопирован и поэтомукопировать его не нужно.
Вы также спросили:
Кроме того, Git выполняет эту задачу пропуска, прежде чем Git выполняет повторное применение test
коммитов к * 1028?*?
Да: список коммитов, которые должны быть скопированы, генерируется первым - во время которого патчи, эквивалентные идентификатору патча, отбрасываются вместе с всеми коммитами слияния, если вы нес использованием параметров -p
или -r
, после чего начинается процесс перебазирования.
(Если вы используете неавтоматизированный git rebase
, использующий git am
, процесс перебазирования по-прежнему использует вывод git format-patch
в качестве входных данных для git am
. В противном случае копируемые хеши коммитов сохраняются в файле или в секвенсоре, который может сохранять или не сохранять их в файле, а затем коммиты выбираются вишней либо с помощью команды git cherry-pick
или прямойтолько секвенсором.Детали зависят от вашего винтажного Git.)