Якщо ви хочете бути впевненим, що патч (одиночна фіксація) буде застосовано поверх певної комісії, ви можете використовувати новий варіант 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 (``) .
(Об'єднав Хуніо С Хамано - gitster- у комітеті 72ce3ff , 23 травня 2016 р.)
format-patch: Додати --baseопцію " " для запису інформації про базове дерево
Технічні працівники або сторонні тестери можуть захотіти знати саме базове дерево, до якого застосовується серія патчів. Навчити git format-patch a '--base для запису інформації про базове дерево та додайте його в кінці першого повідомлення (або супровідний лист, або перший патч у серії).
Інформація про базове дерево складається з "базової фіксації", яка є відомою командою, яка є частиною стабільної частини історії проекту, з якої працюють всі інші, і нульовими або більше "необхідними виправленнями", які добре відомі патчі в польоті, які ще не є частиною "базової фіксації", яку необхідно нанести поверх "базової фіксації" в топологічному порядку, перш ніж патчі можуть бути застосовані.
"Базовий фіксатор" відображається як " base-commit:", а за ним 40-шістнадцятковий ім'я об'єкта комісії.
"Обов'язковий патч" відображається як " 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) .
(Об'єднав Хуніо С Хамано - 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) .
(Об'єднав Хуніо С Хамано - 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-L) .
(Об’єднав Хуніо С Хамано - gitster- у комітеті 71a7de7 , 16 грудня 2019 р.)
rebase: виправити format.useAutoBaseполомку
Повідомляє: Крістіан Бізінгер
Підписався: Дентон Лю
З format.useAutoBase = true, запущена база даних призвела до помилки:
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.useAutoBaseвідмінено.
git apply --stat file.patch# show stats.git apply --check file.patch# перевірити на помилку перед застосуванням.git am < file.patch# застосувати патч нарешті.