Jak po prostu utworzyć łatkę z mojego ostatniego git commit?

186

Szukam magicznej komendy tworzenia łatki z ostatniego dokonanego zatwierdzenia.

Mój przepływ pracy czasami wygląda tak

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

a teraz chcę tylko pisać

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

ale co powinienem tam umieścić zamiast create-patch-from-last-commit-to-file?

claj
źródło

Odpowiedzi:

297

Ogólnie,

git format-patch -n HEAD^

(sprawdź pomoc dla wielu opcji), chociaż tak naprawdę jest to ich wysyłanie pocztą. Tylko dla jednego zatwierdzenia

git show HEAD > some-patch0001.patch

da ci użyteczną łatkę.

Bezużyteczny
źródło
18
bądź ostrożny z „git show HEAD> some-patch0001.patch”, jeśli jest wywoływany w kolorowym terminalu, kopiuje również sekwencje specjalne koloru do pliku.
hrach 21.04.13
12
Możesz także użyć git diff > change.patch. Możesz także uwzględnić zakres zmian i pozwala to tworzyć łatki dla niezatwierdzonych zmian. Duża różnica polega jednak na tym, że nie będzie uwzględniać różnic w plikach binarnych . Zobacz odpowiedź na pytanie Jaka jest różnica między „git format-patch” a „git diff”? po więcej szczegółów.
Rangi Keen,
4
@hrach nie na Linuksie, nie ma
Robin Green
4
Nie, ponieważ nie tak mówi pierwsza linia. Albo git format-patch -1albo git format-patch -n HEAD^powinien działać.
Bezużyteczne
4
Dzięki, nie zrozumiałem, że to dosłownie litera „n”, myślałem, że to symbol zastępczy (łatka formatu ma zarówno opcje „-n”, jak i „- <n>”).
Étienne
60

Biorąc z odpowiedzi @ Bez odpowiedzi, możesz również użyć formularza ogólnego bez parametrów dla ostatniego zatwierdzenia i umieścić go w pliku z:

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

Lub bycie czystszym dla użytkowników systemu Windows, gdy należy unikać ucieczki, podwajając ich:

git format-patch HEAD~1 --stdout > patchfile.patch
a1an
źródło
2
Pracował dla mnie - dzięki. Jeśli zdarzy ci się używać Windowsa i Gita, musisz uciec od marchewki (wiem ohydnie): „git format-patch HEAD ^^ --stdout> patchfile.patch”
Steve Midgley
3
Aby uniknąć problemu z wyjściem z tego karetki (co sprawia, że ​​wygląda to na inne prawidłowe polecenie git) w systemie Windows, możesz użyć alternatywy git format-patch HEAD~1. Myślę, że w Windows jest to mniej mylące.
Michael Burr
30

innym sposobem, jeśli masz identyfikator zatwierdzenia tego konkretnego zatwierdzenia, możesz użyć,

git format-patch -1 {commit-id}
Vijay C.
źródło
9

Potrzebujesz -popcji git log:

git log -1 -p --pretty='%b'
Brandan
źródło
Użyj tego, jeśli nie zależy ci na wiadomości e-mail z / date / tematyki na początku pliku.
Ryan H.
5
git format-patch -1

Wykonuje dla mnie pracę.

Katu
źródło