Мне нужно написать скрипт, который создает патчи для списка номеров коммитов SHA1.
Я пытался использовать git format-patch <the SHA1>
, но это создало патч для каждого коммита, начиная с этого SHA1. После того, как было сгенерировано несколько сотен патчей, мне пришлось убить процесс.
Есть ли способ сгенерировать патч только для конкретного SHA1?
git apply --stat file.patch
# показать статистику.git apply --check file.patch
# проверить на наличие ошибок перед применением.git am < file.patch
# наконец примените патч.git am --keep-cr < mypatch.patch
git am -3 < file.patch
для применения трехстороннего слияния, которое позволит вам разрешать конфликты, используяgit mergetool
впоследствии (или редактирование вручную), найденные здесь .git format-patch -1 <sha> path/to/file.js
Это создаст патч, содержащий только различия в файле .jsДля генерации патчей из верхних коммитов из определенного хэша sha1:
Последние 10 патчей из головы в одном файле патчей:
источник
git format-patch -1 HEAD
сгенерирует патч для самого последнего коммита-2
генерирует патчи для двух последних коммитов, это так, и еще одна вещь для пояснения: командаgot format-patch -2 HEAD
такая же, как строкаgit format-patch HEAD~2
Скажем, у вас есть коммит 2 после коммита 1, который вы сможете запустить:
где 2 и 1 - хэши SHA.
источник
git diff hash^ hash
... "хэш ^" дает предыдущий коммит. (но, конечно, ответ Манойлдса лучше)git show HEAD > mypatch.diff
в то время как вы на коммите должны сделать то же самое.git diff 1 2
Эта команда (как уже предложено @ Naftuli Tzvi Kay ):
Заменить
HEAD
на определенный хэш или диапазон.создаст файл патча для последнего коммита, отформатированного в формате почтового ящика UNIX.
Затем вы можете повторно применить файл исправления в формате почтового ящика:
См:
man git-format-patch
.источник
git
форматированный патч, по крайней мере, если пользователь применяет его правильно.-k
флаг (git am -3
) исправил эту форму меня (безPATCH[0/10]
сообщений коммита). Git версия 2.20.1.windows.1Быстрое и простое решение.
источник
git apply --check patch-file-name
перед применением патча. Это поможет избежать проблем.Если вы хотите быть уверенным, что исправление (одиночная фиксация) будет применено поверх определенной фиксации, вы можете использовать новую опцию git 2.9 (июнь 2016 г.)
git format-patch --base
Смотрите коммит bb52995 , коммит 3de6651 , коммит fa2ab86 , коммит ded2c09 (26 апреля 2016 г.) от Xiaolong Ye (``) .
(Слиты Junio C Hamano -
gitster
- в фиксации 72ce3ff , 23 мая 2016)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)До 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)В 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)источник
Чтобы сгенерировать путь из определенного коммита (не последнего коммита):
источник
если вы просто хотите изменить указанный файл, вы можете:
источник
С моим ртутным прошлым я собирался использовать:
Но я рассматриваю возможность использования
git format-patch -1 $ID
сейчас.источник
Как создать патч только для конкретного SHA1?
Все довольно просто:
Опция 1.
git show commitID > myFile.patch
Вариант 2
git commitID~1..commitID > myFile.patch
Примечание. Замените
commitID
фактическим идентификатором фиксации (код фиксации SHA1).источник