Как мне просто создать патч из моего последнего коммита 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?



Ответы:


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

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'

Используйте этот, если вам не нужны электронные письма из / date / сюжетные линии в начале файла.
Райан Х.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.