Come posso formattare la patch con ciò che nascondo


140

In effetti, nascondo i miei cambiamenti. È possibile che io possa creare una patch con ciò che nascondo? E quindi applicare quella patch in qualche altro repository (il mio collaboratore)?

Lo so git format-patch -1, ma penso che sia per quello che ho commesso. Ma sto cercando la stessa cosa per i cambiamenti che ho nascosto.

E come posso applicare una patch in un altro repository?

Risposte:


156

Certo, git stash showsupporta questo:

git stash show -p

Quindi usa

git stash list

per scoprire il numero della scorta che si desidera esportare come patch, quindi

git stash show -p stash@{<number>} > <name>.patch

per esportarlo.

Per esempio:

git stash show -p stash@{3} > third_stash.patch

1
Ho una domanda correlata sull'applicazione di una patch. Diciamo che la mia patch tocca più file. C'è un modo per applicare la patch 'in modo interattivo'? Scegli a quali file della patch dovrei applicare la patch? Posso farlo?
Silverburgh,

1
@silverburgh: ho dato una rapida occhiata man patche non ho visto nessuna opzione per l'applicazione di patch interattiva. Tuttavia, poiché i file patch sono essi stessi semplici file di testo, in genere ciò che si dovrebbe fare è modificare la patch in un editor di testo per ritagliare le parti pertinenti con cui applicare patch. In alternativa, se si applica la patch in un altro repository Git, è possibile applicare tutto e quindi i git checkoutfile selettivamente che non si desidera modificare ( git checkoutcon un nome file vengono eliminate le modifiche non messe in scena).
Greg Hewgill,

1
@silverburgh è possibile limitare il set di file patchati usando i parametri "--exclude" e "--include" di git.
Kelvin,

@silverburgh puoi fare quanto segue supponendo di avere una patch. applica la patch completamente e poi fai git add --interactive ${YOUR_FILES}e ti darà la possibilità di impegnarti parzialmente.
Alex

15
Grazie. Questo ha funzionato per me:git stash show -p stash@{1} > patch.txt
Ryan,

63

Questa risposta fornisce informazioni sia sul salvataggio della patch sia sull'applicazione nel punto in cui si desidera utilizzarla.

Per riporre l'output in un file:

 git stash show -p --color=never > my-patch-name.patch

Verifica che la patch sia corretta:

git apply --stat my-patch-name.patch

Verifica nessun errore:

git apply --check my-patch-name.patch

Applica la patch

git apply my-patch-name.patch

Questo ha funzionato per me con semplici file di codice di testo, ma ho dovuto tenere conto degli spazi bianchi. Verifica che la patch sia corretta: git apply --check --ignore-space-change --ignore-whitespace my-patch-name.patch applica la patch: git apply --ignore-space-change --ignore-whitespace my-patch-name.patch
Craig Boland

Spiegazione piacevole e concisa. Perché funzionasse dovevo essere nella radice del repository quando si applicava la patch, altrimentigit apply non ho rilevato la differenza.
Max

16

Uso

$> git stash list
stash@{0}: WIP on master: 84fx31c Merged with change to /public/
stash@{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter

per ottenere un elenco dei tuoi oggetti recentemente nascosti. Git in realtà crea oggetti commit quando si ripone.

Sono commessi come tutto il resto. Puoi verificarli in una filiale:

$> git checkout -b with_stash stash@{0}

È quindi possibile pubblicare questa succursale e il collega può unire o selezionare ciliegie quel commit.


13

Le soluzioni sopra non funzioneranno per i dati binari. Il seguente supporto aggiuntivo per esso:

git stash show stash@{0} -p --binary

modificare

Nota: volevo solo aggiungere un commento alle risposte precedenti, ma la mia reputazione non è sufficiente.


3

Credo che questo potrebbe essere uno degli udpates di Git di recente. non devi più correggere le modifiche che hai nascosto. puoi semplicemente applicare le modifiche nascoste su un ramo all'altro.

dì sul ramo A hai nascosto alcune modifiche, chiamate stash @ {1}.

ora passi al ramo B. puoi semplicemente fare:

$git stash apply stash@{1}

questo applica il tuo ramo A cambia nel ramo B.

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.