git apply bierze plik patcha (czyli wynik git diff albo diff -u) i nakłada zawarte w nim zmiany na Twoje drzewo robocze. W przeciwieństwie do git am nie tworzy commita ani nie dotyka historii — po prostu modyfikuje pliki tak, jakbyś wkleił je ręcznie, tylko bez bólu. Używasz go, gdy ktoś przysłał Ci łatkę mailem, gdy chcesz przetestować poprawkę z internetu, albo gdy przerzucasz zmiany między gałęziami bez cherry-picka.
Składnia i najważniejsze opcje
Podstawowa forma to git apply [opcje] . Bez pliku czyta patch ze standardowego wejścia.
--check— tylko sprawdza, czy patch da się nałożyć; niczego nie zmienia. Twój najlepszy przyjaciel przed faktycznym zastosowaniem.--stat— pokazuje podsumowanie zmian (które pliki, ile linii), bez nakładania.-R,--reverse— odwraca patch, czyli cofa zmiany, które wcześniej nałożyłeś.--index— nakłada zmiany na drzewo robocze i od razu na staging (indeks).--cached— modyfikuje wyłącznie indeks, bez dotykania plików na dysku.--3way(lub-3) — przy konflikcie próbuje scalenia trójstronnego i zostawia markery konfliktu zamiast się poddać.-p— usuwa n początkowych segmentów ze ścieżek w patchu (domyślnie-p1).--reject— nakłada co się da, a fragmenty nieudane zapisuje do plików.rejzamiast przerywać całość.
Przykłady użycia
git apply --check zmiany.patch— suchy przebieg: sprawdzasz, czy łatka w ogóle pasuje, zanim cokolwiek ruszysz.git apply zmiany.patch— nakłada zmiany na pliki w drzewie roboczym (zmiany pozostają niezastage’owane).git apply --index zmiany.patch— nakłada i od razu dodaje do staging, gotowe do commita.git apply -R zmiany.patch— cofa wcześniej nałożoną łatkę, gdy okazała się nietrafiona.git diff > moja.patcha potemgit apply --stat moja.patch— zapisujesz własne zmiany do pliku i podglądasz ich zakres przed przeniesieniem gdzie indziej.
Częste błędy i pułapki
Najczęstszy komunikat to patch does not apply — zwykle oznacza, że pliki w repo zmieniły się od momentu utworzenia łatki. Zacznij od --check, a przy realnych konfliktach sięgnij po --3way, które zostawi markery do ręcznego rozwiązania. Druga klasyka to złe poziomy ścieżek: jeśli patch tworzono w innym katalogu, dobierz -p0 lub -p2. Pamiętaj, że git apply jest restrykcyjny — domyślnie albo nakłada całość, albo nic; dopiero --reject pozwala na częściowy sukces z plikami .rej. I nie myl go z git am ani patch z systemu — tu nie ma commita ani autora, są wyłącznie zmiany w plikach.
Powiązane komendy: git diff, git am, git format-patch, git cherry-pick, patch.