Vai al contenuto
GitTree
Guide Git4 minuti di lettura

Come creare e applicare una patch in Git

Una patch trasporta le modifiche tra i repository come un semplice file di testo. Ecco quando utilizzare git diff o git format-patch, quando utilizzare git apply o git am e come correggere una patch che si rifiuta di essere applicata.

Scritto da Kodmora

La software house dietro GitTree

Aggiornato
  • Commit
  • Remoti e push
In questa pagina

Per creare una patch, esegui `git diff > fix.patch` per le modifiche non confermate o `git format-patch -1 HEAD` per l'ultimo commit. Per applicarne uno, esegui `git apply fix.patch` o `git am 0001-my-change.patch`. Utilizza git apply quando desideri apportare le modifiche solo nella cartella di lavoro. Usa git am quando vuoi il commit originale, con il suo messaggio e autore.

Cos'è una patch Git?

Una patch è un file di testo che elenca quali righe rimuovere e in quali file aggiungere. È adatto ai momenti in cui non è possibile effettuare il push allo stesso remoto: inviare una correzione tramite e-mail, spostare una modifica tra repository non correlati o mantenere una modifica locale al di fuori del controllo della versione. Quando tu e l'altra persona condividete un remoto, un ramo è più semplice.

Come posso creare una patch dalle modifiche non salvate?

# unstaged changes
git diff > fix.patch

# staged changes
git diff --staged > fix.patch

# everything since the last commit
git diff HEAD > fix.patch

# include binary files
git diff --binary > fix.patch

I nuovi file che non sono gestiti in stage non vengono visualizzati in git diff. Esegui prima git add su di essi e utilizza --staged.

Come posso creare una patch dai commit?

# the last commit
git format-patch -1 HEAD

# the last three commits, one file each
git format-patch -3

# everything on this branch that main does not have
git format-patch main..feature/search -o patches/

# all of it in a single file
git format-patch main --stdout > feature.patch

format-patch scrive file chiamati come 0001-add-search-box.patch. Ciascuno conserva il messaggio, l'autore e la data del commit, cosa che un semplice git diff perde.

Come applico una patch?

Controllalo prima. Questi due comandi non cambiano nulla:

# what it touches
git apply --stat fix.patch

# whether it will apply
git apply --check fix.patch

Quindi applicalo nel modo desiderato:

# into the working folder, nothing staged
git apply fix.patch

# into the working folder and the staging area
git apply --index fix.patch

# as commits, with their messages and authors
git am patches/*.patch

Qual è la differenza tra git apply e git am?

git apply rispetto a git am
git applygit am
LeggeQualsiasi differenzaFile da git format-patch o caselle di posta
RisultatoFile modificati, nessun commitUn commit per patch
Mantiene il messaggio e l'autoreNoSì
Su un fallimentoNon applica nulla per impostazione predefinitaSi ferma; continua o git am --abort

Come posso risolvere il problema "la patch non si applica"?

error: patch failed: src/search.ts:14
error: src/search.ts: patch does not apply

Il file è cambiato da quando è stata creata la patch, quindi le sue righe di contesto non corrispondono più. Prova questi in ordine:

  1. git apply --3way fix.patch utilizza i BLOB originali per unire e lascia i normali indicatori di conflitto. Ha bisogno di quei BLOB nel tuo repository.
  2. git apply --whitespace=fix fix.patch aiuta quando differiscono solo gli spazi o le terminazioni di riga.
  3. git apply --reject fix.patch applica ciò che può e scrive le parti non riuscite in .rej file affinché tu possa farlo manualmente.
  4. Controlla il commit da cui è stata creata la patch, applicala lì, quindi esegui il rebase.

Per git am, utilizza git am --3way, risolvi il conflitto, git add il file ed esegui git am --continue. Per tornare indietro, esegui git am --abort, come elencato in come interrompere un'unione o un rebase.

Come si annulla una patch?

git apply -R fix.patch

-R applica la patch al contrario. Se hai utilizzato git am, i commit sono commit normali, quindi annullali con `git reset` o `git revert`.

Come creare e applicare una patch in GitTree

  1. Salva una patch

    Fare clic con il pulsante destro del mouse su un commit e aprire Copia, quindi Crea patch da commit.... Selezionare diversi commit per Crea patch da commit… oppure fare clic con il pulsante destro del mouse su un file modificato per Crea patch da modifiche file….

  2. Applicare una toppa

    Esegui Applica patch… dalla tavolozza dei comandi e scegli il file. GitTree indica quanti file e commit contiene e se include modifiche binarie.

  3. Scegli come applicarlo

    In Applica a, scegli Solo albero di lavoro (git apply), Albero di lavoro e metti in stage le modifiche (git apply --index) o Come commit sul ramo corrente (git am), quindi premi Applica.

Crea patch da commit… nel sottomenu Copia di un commit in GitTree.
Crea patch da commit… nel sottomenu Copia di un commit in GitTree.GitTree interfaccia con un repository dimostrativo.

La guida alla creazione e applicazione delle patch elenca tutte le opzioni.

Domande frequenti

Qual è la differenza tra git diff e git format-patch?

git diff scrive solo le modifiche. git format-patch scrive un file per commit con il messaggio, l'autore e la data, quindi git am può ricreare il commit.

Git apply crea un commit?

No. Cambia solo i file. Rivedili, quindi confermati come al solito. Utilizza git am per ottenere commit.

Come posso applicare una patch da GitHub?

Aggiungi .patch alla fine di un URL di commit o richiesta pull su GitHub, scarica il file ed esegui git am su di esso.

Una patch può includere file binari?

Sì, se lo crei con git diff --binary. git format-patch include modifiche binarie per impostazione predefinita.

Il cherry-pick è meglio di una patch?

Quando entrambi i commit si trovano in un repository o in un remoto recuperato, sì: `git cherry-pick` è più breve e tiene traccia del commit di origine. Le patch servono quando i repository non possono raggiungersi tra loro.

Fonti

Le affermazioni su altri prodotti sono state confrontate con le rispettive pagine ufficiali in data 7 novembre 2026. Cambiano prezzi e caratteristiche; le pagine dei venditori sono la fonte della verità.