Якщо ви хочете бути впевненим, що патч (одиночна фіксація) буде застосовано поверх певної комісії, ви можете використовувати новий варіант 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
# застосувати патч нарешті.