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?



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ę.


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

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}

9

Potrzebujesz -popcji git log:

git log -1 -p --pretty='%b'

Użyj tego, jeśli nie zależy ci na wiadomości e-mail z / date / tematyki na początku pliku.
Ryan H.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.