Come applicare una patch generata con git format-patch?


223

Ho 2 repository locali git che puntano entrambi allo stesso repository remoto.

In un repository git, se lo faccio git format-patch 1, come posso applicare quella patch all'altro repository?

Risposte:


331

Nota: per prima cosa puoi vedere in anteprima cosa farà la tua patch:

Prima le statistiche:

git apply --stat a_file.patch

Quindi una corsa a secco per rilevare errori:

git apply --check a_file.patch

Infine, è possibile utilizzare git amper applicare la patch come commit: consente di firmare una patch applicata.
Questo può essere utile per riferimento futuro.

git am --signoff < a_file.patch 

Vedi un esempio in questo articolo :

Nel tuo registro git, troverai che i messaggi di commit contengono un tag "Sign-off-by". Questo tag verrà letto da Github e altri per fornire informazioni utili su come il commit è finito nel codice.

Esempio


9
Nota per sé: 200 ° distintivo d'oro della Grande Risposta.
VonC,

4
git am < somepatch.patchrestituisce "fatale: nome identificativo vuoto (per <>) non consentito". Qualcuno può spiegarmi perché?
gromit190,

@ gromit190 significa cattive Authorintestazioni nella patch, e / o non l'hai fatto git config user.{name,email}.
Ulidtko,

OK; git apply --checkdice patch does not apply, e git apply -3dice repository lacks the necessary blob to fall back on 3-way merge.In parole povere, commettere un rebasing è una tale brezza; ma come fanno le persone a rimodellare le loro patch in aggiunta al codice aggiornato?
Ulidtko,

1
@ulidtko Magari con stackoverflow.com/a/15375869/6309 ?
VonC

163
git apply name-of-file.patch

25
Questo potrebbe non aver risposto alla domanda dettagliata originale ma ha risposto alla domanda nel titolo, motivo per cui sono su questa pagina. grazie!
Rock Lee

12
Capisco che questa è una vecchia domanda e risposta ... ma ho pensato che potrebbe essere utile per alcune persone capire la differenza tra git apply e git am .
mgarey,

1
git apply "[... percorso completo del file ...] / name-of-file.patch"
Anton Lyhin

41

Oppure, se lo stai prendendo a calci nella vecchia scuola:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
Solo così sei consapevole: ciò non creerà un commit, quindi perderà il messaggio di commit e le informazioni sull'autore.
Cesare,

22

Per prima cosa dovresti prendere nota della differenza tra git amegit apply

Quando si utilizza, git amdi solito si desidera applicare molte patch. Quindi dovrebbe usare:

git am *.patch

o semplicemente:

git am

Git troverà automaticamente le patch e le applicherà in ordine ;-)

UPD
Qui puoi trovare come generare tali patch


1
Questa spiegazione della differenza mi ha aiutato ad usare git apply.. e in --reverse:-) 👍
Jordan Gee,


14

Se si utilizza un IDE JetBrains (come IntelliJ IDEA, Android Studio, PyCharm), è possibile trascinare il file della patch e rilasciarlo all'interno dell'IDE e verrà visualizzata una finestra di dialogo che mostra il contenuto della patch. Tutto quello che devi fare ora è fare clic su "Applica patch" e verrà creato un commit.


1
Grazie per questo. Questo è davvero utile per tutti. C'è una risposta accettata ma questo è anche utile.
Lasitha Benaragama,

1
@ambarox Ma questa risposta è stata annullata una volta, non so perché
ice1000

1
qualcuno potrebbe pensare che l'unico modo per applicare le patch sia attraverso la riga di comando. : D ti ho dato un voto. saluti amico.
Lasitha Benaragama,

1
@LasithaBenaragama - kind of. SO ha lo scopo non solo di aiutare l'OP, ma anche di tutti quelli che seguono. Questa risposta (sebbene utile) non fornisce una soluzione generale. Ciò renderebbe un eccellente post sul blog, ma non una risposta "COSÌ buona". Spiegherebbe il downvote!
OldTinfoil,

-2

È possibile utilizzare il cmd indicato di seguito

git apply fileName.patch
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.