Если вы хотите быть уверенным, что исправление (одиночная фиксация) будет применено поверх определенной фиксации, вы можете использовать новую опцию git 2.9 (июнь 2016 г.) git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
Смотрите коммит bb52995 , коммит 3de6651 , коммит fa2ab86 , коммит ded2c09 (26 апреля 2016 г.) от Xiaolong Ye (``) .
(Слиты Junio C Hamano - gitster
- в фиксации 72ce3ff , 23 мая 2016)
format-patch
: добавить --base
опцию ' ' для записи информации о базовом дереве
Сопровождающие или сторонние тестировщики могут узнать точное базовое дерево, к которому относится серия исправлений. Научите git format-patch --base
опции ' ' записывать информацию о базовом дереве и добавлять ее в конце первого сообщения (либо сопроводительное письмо, либо первое исправление в серии).
Информация о базовом дереве состоит из «базового коммита», который является хорошо известным коммитом, который является частью стабильной части истории проекта, на котором все остальные работают, и нуля или более «обязательных патчей», которые хорошо известны. патчи в полете, которые еще не являются частью «базового коммита», которые необходимо применить поверх «базового коммита» в топологическом порядке, прежде чем патчи могут быть применены.
«Базовый коммит» отображается как « base-commit:
», за которым следует шестнадцатеричный код имени объекта коммита.
«Предварительно установленное исправление» отображается как « prerequisite-patch-id:
», за которым следует 40-шестнадцатеричный «идентификатор исправления», который можно получить, пропустив исправление с помощью команды « git patch-id --stable
».
Git 2.23 (Q3 2019) улучшит это, потому что « --base
опция» « format-patch
» patch-ids
нестабильно вычисляла для обязательных патчей, которая была обновлена для вычисления способом, совместимым с « git patch-id --stable
».
Смотрите коммит a8f6855 , коммит 6f93d26 (26 апреля 2019 г.) Стивена Бойда ( akshayka
) .
(Слиты Junio C Hamano - gitster
- в фиксации 8202d12 , 13 июн 2019)
format-patch
: сделать --base patch-id
вывод стабильным
Мы не очищали контекст каждый раз, когда обрабатывали ханк в
patch-id
коде генерации diff.c
, но мы делали это, когда генерировали «стабильные» идентификаторы патчей с помощью patch-id
инструмента «».
Давайте перенесем эту похожую логику из patch-id.c
в, diff.c
чтобы мы могли получить тот же хеш, когда мы генерируем идентификаторы исправлений для ' format-patch --base=
' типов вызовов команд.
До Git 2.24 (Q4 2019) " git format-patch -o <outdir>
" сделал эквивалент " mkdir <outdir>
" не " mkdir -p <outdir>
", что исправляется.
См. Коммит edefc31 (11 октября 2019 г.) Берта Весарга ( bertwesarg
) .
(Слиты Junio C Hamano - gitster
- в фиксации f1afbb0 , 18 октября 2019)
format-patch
: создать ведущие компоненты выходного каталога
Подписано: Берт Весарг
'git format-patch -o' сделал эквивалент 'mkdir', а не 'mkdir -p', что исправляется.
Избегайте использования ' adjust_shared_perm
' в ведущих каталогах, которые могут иметь последствия для безопасности. Достигается путем временного отключения функции config.sharedRepository
«лайк» git init
.
В Git 2.25 (Q1 2020) " git rebase
" не работал должным образом, когда format.useAutoBase
установлена переменная конфигурации, которая была исправлена.
См. Коммит cae0bc0 , коммит 945dc55 , коммит 700e006 , коммит a749d01 , коммит 0c47e06 (04 декабря 2019 г.) от Denton Liu ( Denton-L
) .
(Слиты Junio C Hamano - gitster
- в фиксации 71a7de7 , 16 дек 2019)
rebase
: исправить format.useAutoBase
поломку
Автор: Кристиан Бизингер.
Подписано: Дентон Лю
При format.useAutoBase = true
запуске rebase произошла ошибка:
fatal: failed to get upstream, if you want to record base commit automatically,
please use git branch --set-upstream-to to track a remote branch.
Or you could specify base commit by --base=<base-commit-id> manually
error:
git encountered an error while preparing the patches to replay
these revisions:
ede2467cdedc63784887b587a61c36b7850ebfac..d8f581194799ae29bf5fa72a98cbae98a1198b12
As a result, git cannot rebase them.
Исправьте это, всегда передавая --no-base
format-patch из rebase, чтобы эффект был format.useAutoBase
сведен на нет.
git apply --stat file.patch
# показать статистику.git apply --check file.patch
# проверить на наличие ошибок перед применением.git am < file.patch
# наконец примените патч.