Как мне просто создать патч из моего последнего коммита git?

186

Я ищу магическую команду создания патча из последнего сделанного коммита.

Мой рабочий процесс иногда выглядит так

vi some.txt
git add some.txt
git commit -m "some change"

а теперь я просто хочу написать

git create-patch-from-last-commit-to-file SOME-PATCH0001.patch

но что я должен поставить вместо create-patch-from-last-commit-to-file?

claj
источник
возможный дубликат Generate git patch для определенного коммита
manojlds
2
Хороший источник: ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git
Адам Оксвари

Ответы:

297

В основном,

git format-patch -n HEAD^

(проверьте справку для многих вариантов), хотя это действительно для их рассылки. Для одного коммита просто

git show HEAD > some-patch0001.patch

даст вам полезный патч.

Бесполезный
источник
18
будьте осторожны с "git show HEAD> some-patch0001.patch", если он вызывается в цветном терминале, он также выводит цветовые escape-последовательности в файл.
Грач
12
Вы также можете использовать git diff > change.patch. Вы также можете включить диапазон ревизий, и это позволит вам создавать патчи для незафиксированных изменений. Большая разница, однако, заключается в том, что он не будет включать различия в двоичных файлах . См. Ответ на вопрос «В чем разница между« git format-patch »и« git diff »? для более подробной информации.
Ранги Кин
4
@ hrach не в Linux, это не так
Робин Грин,
4
Нет, потому что это не то, что говорит первая строка. Либо git format-patch -1или git format-patch -n HEAD^должно работать.
бесполезно
4
Спасибо, я не поняла, что это буквально буква 'n', я подумала, что это заполнитель (format-patch имеет опции '-n' и '- <n>').
Этьен
60

Используя ответ @Useless, вы также можете использовать общую форму без параметров для последнего коммита и поместить ее в файл с:

git format-patch HEAD^ --stdout > patchfile.patch

Или, чтобы быть чище для пользователей Windows, когда нужно избегать карет, удваивая их:

git format-patch HEAD~1 --stdout > patchfile.patch
A1An
источник
2
Работал на меня - спасибо. Если вам случится использовать Windows и Git, вам нужно избежать кнута (я знаю, отвратительный): «git format-patch HEAD ^^ --stdout> patchfile.patch»
Стив Мидгли
3
Чтобы избежать проблемы с Windows, связанной с необходимостью избежать этой каретки (что делает ее похожей на другую действительную команду git), вы можете использовать альтернативу git format-patch HEAD~1. Я думаю, что в Windows все становится менее запутанным.
Майкл Берр
30

иначе, если у вас есть идентификатор фиксации этого конкретного коммита, вы можете использовать,

git format-patch -1 {commit-id}
Виджей С
источник
9

Вам нужна -pопция для git log:

git log -1 -p --pretty='%b'
Brandan
источник
Используйте этот, если вам не нужны электронные письма из / date / сюжетные линии в начале файла.
Райан Х.
5
git format-patch -1

Делает работу за меня.

Кату
источник