Come si prende un file diff git e lo si applica a un ramo locale che è una copia dello stesso repository?


492

Ho un file .diff creato da un collega e vorrei applicare le modifiche elencate in quel file diff al mio ramo locale dello stesso repository. Non ho accesso al pc o al ramo di quel lavoratore utilizzato per generare questo file diff.

Ovviamente potrei andare riga per riga e digitare nuovamente tutto, ma preferirei non sottoporre il sistema a errori umani. Qual è il modo più semplice per farlo?

Risposte:


747

Copia il file diff nella radice del tuo repository, quindi esegui:

git apply yourcoworkers.diff

Maggiori informazioni sul applycomando sono disponibili nella sua pagina man .

A proposito: un modo migliore per scambiare interi commit per file è la combinazione dei comandi git format-patchsul mittente e quindi git amsul destinatario, perché trasferisce anche le informazioni sull'autore e il messaggio di commit.

Se l'applicazione della patch ha esito negativo e se i commit da cui è stata generata la diff sono effettivamente nel repository, è possibile utilizzare l' -3opzione applyche tenta di unire le modifiche.

Funziona anche con pipe Unix come segue:

git diff d892531 815a3b5 | git apply

3
Grazie per la risposta, ma ciò ha causato un errore dicendo: patch fallita: nomefile.php: 202 errore: nomefile.php: la patch non si applica. La buona notizia è che non è il primo nome file nel file, quindi almeno sarebbe stato in grado di elaborare parte del file. qualche idea?
Mike_K,

4
Sembra anche che tu abbia apportato modifiche a quel file che impediscono il funzionamento della patch. Per risolvere questo problema, è possibile eseguire il commit delle modifiche, creare un nuovo ramo, reimpostarlo sul commit in cui tu e il tuo collega siete divergenti, applicare la patch, impegnarla e quindi unire i due rami.
Philipp,

3
@orlybg Se non lo hai ancora eseguito, esegui la git reset --hardrestituzione dell'albero di lavoro all'ultimo commit. Quando lo hai già eseguito, aggiungi la revisione a cui desideri tornare.
Philipp,

5
@orlybg Siamo spiacenti, ma poi sei fregato. Git crea solo un checkpoint a cui puoi tornare quando fai un commit. Ecco perché molte guide git raccomandano di impegnarsi presto e spesso .
Philipp,

4
Per lo meno @orlybg, esegui git stashprima di eseguire alcune azioni che potresti voler annullare dopo. Quindi, in entrambi i casi, puoi ripristinare la scorta e impegnarti in un momento successivo.
maurice,
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.