Înainte ca platformele centralizate precum GitHub sau GitLab să popularizeze modelul de Pull Requests, colaborarea distribuită în open-source se baza exclusiv pe schimbul de patch-uri transmise prin email (acesta rămâne și astăzi fluxul oficial prin care este dezvoltat nucleul Linux, Git și PostgreSQL). Comenzile git format-patch și git am (Apply Mailbox) oferă cel mai curat mecanism de transfer al modificărilor fără acces direct la un depozit comun.
# Generăm un fișier patch pentru ultimul commit:
git format-patch -1 HEAD
# Sau generăm patch-uri pentru toate commit-urile de pe branch-ul curent
# care nu există încă pe 'main':
git format-patch main..feature
# Această comandă creează fișiere numerotate pe disc:
# 0001-feat-adaugare-autentificare-oauth.patch
# 0002-fix-corectare-redirect-callback.patch
Ce conține un fișier generat de format-patch?
Spre deosebire de un simplu git diff (care conține doar diferențele de cod), un fișier format-patch este formatat conform standardului de email RFC 2822 și conține toate metadatele originale de commit: numele autorului, adresa de email, data exactă, mesajul complet de commit și diferența unificată (diff).
# Pe serverul sau mașina care primește patch-ul:
# Comanda 'git am' aplică patch-ul și RECONSTRUIEȘTE commit-ul original
# păstrând autorul și data exactă din fișierul patch!
git am 0001-feat-adaugare-autentificare-oauth.patch
# Dacă apare un conflict în timpul aplicării:
# 1. Rezolvați conflictul în fișierele marcate.
# 2. Adăugați fișierele rezolvate în staging: git add fisier.php
# 3. Continuați aplicarea: git am --continue
# (Sau renunțați complet la aplicare cu: git am --abort)