Muszę napisać skrypt, który tworzy łatki dla listy numerów zatwierdzeń SHA1.
Próbowałem użyć git format-patch <the SHA1>
, ale wygenerowało to poprawkę dla każdego zatwierdzenia od czasu SHA1. Po wygenerowaniu kilkuset łatek musiałem zabić proces.
Czy istnieje sposób na wygenerowanie łatki tylko dla określonego SHA1?
git apply --stat file.patch
# pokaż statystyki.git apply --check file.patch
# sprawdź błąd przed zastosowaniem.git am < file.patch
# zastosuj łatkę w końcu.git am --keep-cr < mypatch.patch
git am -3 < file.patch
aby zastosować przy użyciu trójstronnego scalenia, które pozwoli ci rozwiązać konflikty przy użyciugit mergetool
późniejszej (lub ręcznej edycji) znalezionej tutaj .git format-patch -1 <sha> path/to/file.js
Spowoduje to utworzenie łatki zawierającej tylko pliki różnic dla pliku.jsDo generowania poprawek z najwyższych zatwierdzeń z określonego skrótu sha1:
Ostatnie 10 łatek z głowy w jednym pliku łatki:
źródło
git format-patch -1 HEAD
wygeneruje łatkę dla ostatniego zatwierdzenia-2
generowany łaty dla ostatnich 2 zatwierdzeń, to jest jeszcze jedna rzecz do wyjaśnienia, że poleceniegot format-patch -2 HEAD
jest takie samo jak wierszgit format-patch HEAD~2
Załóżmy, że masz zatwierdzenie id 2 po zatwierdzeniu 1, możesz uruchomić:
gdzie 2 i 1 to skróty SHA.
źródło
git diff hash^ hash
. „hash ^” poprzedza zatwierdzenie. (ale oczywiście odpowiedź manojldsa jest lepsza)git show HEAD > mypatch.diff
kiedy jesteś na zatwierdzeniu, powinieneś zrobić to samo.git diff 1 2
To polecenie (sugerowane już przez @ Naftuli Tzvi Kay ):
Zamień na
HEAD
określony skrót lub zakres.wygeneruje plik łatki dla ostatniego zatwierdzenia sformatowanego tak, aby przypominał format skrzynki pocztowej UNIX.
Następnie możesz ponownie zastosować plik poprawki w formacie skrzynki pocztowej poprzez:
Zobacz:
man git-format-patch
.źródło
git
sformatowana łatka, przynajmniej jeśli użytkownik zastosuje ją we właściwy sposób.-k
flagę (git am -3
), naprawiłem ten formularz (brakPATCH[0/10]
komunikatów zatwierdzania). Wersja Git 2.20.1.windows.1Szybkie i proste rozwiązanie.
źródło
git apply --check patch-file-name
przed nałożeniem łatki. Pomoże to uniknąć problemów.Jeśli chcesz mieć pewność, że łatka (pojedyncze zatwierdzenie) zostanie zastosowana na konkretnym zatwierdzeniu, możesz użyć nowej opcji git 2.9 (czerwiec 2016 r.)
git format-patch --base
Zobacz zatwierdzenie bb52995 , zatwierdzenie 3de6651 , zatwierdzenie fa2ab86 , zatwierdzenie ded2c09 (26 kwietnia 2016 r.) Przez Xiaolong Ye (``) .
(Połączone przez Junio C. Hamano -
gitster
- w zobowiązaniu 72ce3ff , 23 maja 2016 r.)Git 2.23 (III kwartał 2019 r.) Poprawi to, ponieważ „
--base
” opcja „format-patch
” obliczyłapatch-ids
wstępnie wymagane łatki w niestabilny sposób, który został zaktualizowany do obliczeń w sposób zgodny z „git patch-id --stable
”.Zobacz zatwierdzenie a8f6855 , zatwierdzenie 6f93d26 (26 kwietnia 2019 r.) Autor: Stephen Boyd (
akshayka
) .(Połączone przez Junio C Hamano -
gitster
- w commit 8202d12 , 13 czerwca 2019)Przed Git 2.24 (IV kwartał 2019 r.) „
git format-patch -o <outdir>
” Zrobił odpowiednik „mkdir <outdir>
” nie „mkdir -p <outdir>
”, co jest poprawiane.Zobacz commit edefc31 (11 października 2019) autor: Bert Wesarg (
bertwesarg
) .(Połączone przez Junio C Hamano -
gitster
- w commit f1afbb0 , 18 października 2019)W przypadku Git 2.25 (Q1 2020) „
git rebase
” nie działał dobrze, gdyformat.useAutoBase
ustawiono zmienną konfiguracyjną, co zostało poprawione.Zobacz zatwierdzenie cae0bc0 , zatwierdzenie 945dc55 , zatwierdzenie 700e006 , zatwierdzenie a749d01 , zatwierdzenie 0c47e06 (04 grudnia 2019) przez Denton Liu (
Denton-L
) .(Połączone przez Junio C Hamano -
gitster
- w commit 71a7de7 , 16 grudnia 2019)źródło
Aby wygenerować ścieżkę z określonego zatwierdzenia (nie ostatniego zatwierdzenia):
źródło
jeśli chcesz różnicować określony plik, możesz:
źródło
Z moim pochodzeniem rtęciowym zamierzałem użyć:
Ale rozważam użycie
git format-patch -1 $ID
teraz.źródło
Jaki jest sposób wygenerowania łatki tylko dla określonego SHA1?
To dość proste:
Opcja 1.
git show commitID > myFile.patch
Opcja 2.
git commitID~1..commitID > myFile.patch
Uwaga: Zamień na
commitID
rzeczywisty identyfikator zatwierdzenia (kod zatwierdzenia SHA1).źródło