2013-03-21 15 views
6

Come annullare una parte delle modifiche applicate a un file che si è verificato durante un tentativo. Ho i seguenti commit e le modifiche accidentali accaduto tra A e B a 'file.txt'Git annulla le modifiche parziali a un file

...--A--B--... 

Ho una patch diff del file in file.txt-B-A.patch che ritorna tutti modifiche. Tuttavia, desidero annullare solo alcune modifiche in file.txt, in modo simile alla selezione manuale delle modifiche in un conflitto di unione. C'è un modo per farlo senza modificare il file di patch?

+0

Vedi anche [D: Posso fare un Revert parziale GIT] (http://stackoverflow.com/questions/5669358/can-i-do-a-partial-revert-in-git). – Totor

risposta

8

C'è un altro modo per farlo che non richiede affatto il file di correzione.

Il problema si è verificato passando da A a B, quindi ripristinare prima le modifiche in B ma non eseguire il commit automatico.

$ git revert --no-commit <commit hash of B> 

Le modifiche apportate a git revert vengono eseguite. Staccili da loro.

$ git reset HEAD 

successivo, in modo interattivo passare attraverso file.txt e lo stadio solo le modifiche che si desidera conservare.

$ git add --patch file.txt 

solo i ripristini selezionate siano ora in scena. Impegnati.

$ git commit 

Infine, pulire gli avanzi unstaged da git revert.

$ git reset --hard 
5

Molti comandi di git hanno l'opzione -p ("patch") o -i ("interattiva") per fare qualcosa in parte. Per le diff arbitrarie non penso che sia supportato, ma puoi applicare la patch e quindi annullare selettivamente le modifiche non modificate utilizzando git checkout -p -- <path(s)>, ad es. git checkout -p -- . se sei al livello più alto del repository.

+0

ma che è su base per file, tuttavia vorrei annullare particolari modifiche all'interno di un singolo file (forse questo non è un git correlato di per sé). – camillobruni

+0

Quindi, applica la patch e poi 'git checkout -p - file.txt'; il risultato netto è che hai applicato la patch a file.txt tranne per le cose che hai annullato nel secondo passaggio. Se non è quello che vuoi, sto fraintendendo la tua domanda. –

+0

La patch includerà TUTTE le modifiche tra i file e non solo una parte di esso. Diciamo che voglio solo annullare le modifiche avvenute dopo la riga 500 nel mio file. – camillobruni

Problemi correlati