Come posso eliminare le modifiche non messe in scena in Git?


4820

Come posso eliminare le modifiche nella mia copia di lavoro che non sono nell'indice?


9
git-cleanrimuove solo i file non tracciati
Yega

24
Chiarire il commento di Asenar sopra, git-clean -dfpuò essere pericoloso. Eliminerà i file locali non tracciati (ad es. Coperti da un .gitignore) Leggi attentamente di seguito e considera git checkout. invece
jacanterbury il

15
'git clean -df' Attenzione! L'ho provato e ho perso le cartelle chiave che non possono essere ripristinate ... Ahi!
Gabe Karkanis,

46
colpire git statusdà un suggerimento su come farlo! git checkout -- .
Paulo,

4
@Paulo: a partire dal luglio 2019, git statusdà il suggerimento: git restore. git restoreè un nuovo comando esattamente per questo scopo. Vedi il mio aggiornamento del 2019 .
Prosoitos,

Risposte:


2686

Un altro modo più veloce è:

git stash save --keep-index --include-untracked

Non è necessario includere --include-untrackedse non si desidera essere accurati al riguardo.

Dopodiché, puoi rilasciare quella scorta con un git stash dropcomando se vuoi.


122
E per essere accurato, vorrai anche tu --include-untracked.
TJ Crowder,

9
@KarimSamir: la domanda si rivolge specificamente alle modifiche che non sono presenti nell'indice . Il git resetcomando annullerà anche le modifiche nell'indice.
Greg Hewgill,

146
git checkout -. è molto più veloce
Frank,

38
Né il git stash, né alcuna varietà di git checkoutscarti eliminerà le eliminazioni non messe in scena. Secondo l'output di git status, l'attuale risposta corretta è un po 'di saporegit reset HEAD
Chris Warth,

127
Questo inquina lo stack. git checkout -- .fa il lavoro con un solo comando.
Felipe Tonello,

5340

Per tutti i file non gestiti nella directory di lavoro corrente utilizzare:

git checkout -- .

Per un file specifico utilizzare:

git checkout -- path/to/file/to/revert

--qui per rimuovere l' ambiguazione dell'argomento .


117
Questo sembra essere il modo canonico git. cioè esattamente cosa ti dice git se digitigit status
ABMagil,

27
Non funziona se ci sono file non tracciati. Dice Git error: The following untracked working tree files would be overwritten by checkout: ....
Michael Iles,

92
domanda per principianti, cosa significa "git checkout -." significa semanticamente?
Kaid

120
@Ninjack git checkout -- .significa la stessa cosa git checkout ., tranne per il fatto che sei esplicito sul fatto che non stai specificando il nome della filiale. Entrambi dicono di verificare la versione HEAD sul ramo in cui mi trovo attualmente per "." o './'. Se lo fai git checkout branch-name directory-or-file-namein generale, ottieni la versione HEAD di directory-or-file-namesul ramo branch-name.
akgill

23
IMO questa variante è imperfetta, in quanto non gestisce la situazione in cui il repository modificato non si trova sulla revisione HEAD al momento della pulizia delle modifiche e NON si desidera aggiornarlo su HEAD e si desidera semplicemente pulire le modifiche.
alexykot,

1899

Sembra che la soluzione completa sia:

git clean -df
git checkout -- .

git cleanrimuove tutti i file non monitorati ( avviso : sebbene non elimini i file ignorati menzionati direttamente in .gitignore, può eliminare i file ignorati che risiedono nelle cartelle ) e git checkoutcancella tutte le modifiche non messe in scena.


116
Le altre due risposte in realtà non funzionano, questa ha funzionato.
John Hunt,

18
@dval questo è perché il primo comando ha rimosso i file non indicizzati e il secondo ha rimosso le modifiche non organizzate (dei file indicizzati). Quindi, se non hai apportato modifiche temporanee, è come tornare all'ultimo commit congit reset --hard
Amanuel Nega,

3
usa -dff se la directory non tracciata è un clone git.
accuya,

87
Fai attenzione a eseguire git clean -df. Se non capisci cosa fa, potresti eliminare i file che intendi conservare, come robots.txt, file caricati, ecc.
ctlockey,

40
Come diceva @ctlockey, il primo comando cancella anche le directory se sono composte solo da file ignorati ... Ho perso un sacco di file di configurazione sul mio progetto :( Stai attento.
Maxime Lorant,

326

Questo verifica l'indice corrente per la directory corrente, eliminando tutte le modifiche ai file dalla directory corrente verso il basso.

git checkout .

o questo che estrae tutti i file dall'indice, sovrascrivendo i file dell'albero di lavoro.

git checkout-index -a -f

28
Ciao, qual è la differenza tra git checkout .e git checkout -- .?
Evan Hu,

5
@Evan: nessuna differenza in questo caso.
Robert Siemer,

10
@Robert Siemer e nel caso generale?
RJFalconer,

2
@Evan: brutto posto per porre questa domanda. - Non è correlato alla domanda del PO e non è correlato alla risposta qui.
Robert Siemer,

14
+1 Questa è la RISPOSTA GIUSTA, poiché gestisce correttamente il caso in cui alcuni file presentano modifiche sia in fasi che non in fasi. Si noti che questa soluzione DISCARDA le modifiche non messe in scena; se desideri conservarli, allora dovresti usare la risposta di @ greg-hewgill git stash save --keep-index.
Rabarbaro,

248
git clean -df

Pulisce l'albero di lavoro rimuovendo in modo ricorsivo i file che non sono sotto il controllo della versione, a partire dalla directory corrente.

-d: Rimuove le directory non tracciate oltre ai file non tracciati

-f: Force (potrebbe non essere necessario in base clean.requireForceall'impostazione)

Corri git help cleanper vedere il manuale


perché questa risposta non ha tutti i voti? ha risposto nel 2011 e ancora corretto.
Eugene Braginets

106

Il mio preferito è

git checkout -p

Ciò ti consente di ripristinare selettivamente i blocchi.

Guarda anche:

git add -p

9
Adoro la possibilità di vedere il cambiamento reale prima che venga scartato.
Penghe Geng,

Questo è quello che uso. git checkout -p e poi "a" per accettare tutto.
Mattis,

2
Non ci ho mai pensato. Ciò -paggiunge un ulteriore livello di sicurezza. Combinalo con git clean -dper rispondere effettivamente a OP.
Stephan Henningsen,

96

Poiché nessuna risposta suggerisce l'esatta combinazione di opzioni che utilizzo, eccola qui:

git clean -dfx
git checkout .

Questo è il testo della guida in linea per le git cleanopzioni utilizzate :

-d

Rimuovere le directory non tracciate oltre ai file non tracciati. Se una directory non tracciata è gestita da un diverso repository Git, non viene rimossa per impostazione predefinita. Utilizzare l' -fopzione due volte se si desidera veramente rimuovere tale directory.

-f

Se la variabile di configurazione Git clean.requireForcenon è impostata false, Git pulito si rifiuterà di eliminare i file o directory a meno che determinato -f, -no -i. Git rifiuterà di eliminare le directory all'interno della .gitsottodirectory o del file, a meno che non -fvenga fornito un secondo .

-x

Non utilizzare le regole di ignore da .gitignore(per directory) e $GIT_DIR/info/exclude, ma comunque utilizzare le regole di ignore fornite con le -eopzioni. Ciò consente di rimuovere tutti i file non tracciati, inclusi i prodotti di compilazione. Questo può essere usato (possibilmente in combinazione con git reset) per creare una directory di lavoro incontaminata per testare una build pulita.

Inoltre, git checkout .deve essere eseguito nella radice del repository.


+1 per questa soluzione. Per quanto riguarda la tua osservazione che "git checkout. Deve essere fatto nella radice del repository", forse potresti menzionare che possiamo semplicemente fare git reset --hardinvece? (che in realtà è equivalente git reset --hard HEADe dovrebbe funzionare qualunque sia la directory corrente ...)
ErikMD

2
Anche per quanto riguarda il primo comando git clean -dfx, ecco un suggerimento che uso per essere al sicuro prima di eseguirlo: basta eseguire git clean -d -x -nprima, per visualizzare l'elenco dei file da rimuovere, quindi confermare l'operazione eseguendo git clean -d -x -f(ho messo l'argomento -n, rispettivamente -falla fine per poterlo cambiare rapidamente in un terminale)
ErikMD

5
Nota velocemente che questo non è reversibile e se hai dei file .gitignoreli perderai. Quindi considera di eseguire il backup del tuo progetto prima di questo.
Rob

69

Se si desidera semplicemente rimuovere le modifiche ai file esistenti , utilizzare checkout( documentato qui ).

git checkout -- .
  • Non è stato specificato alcun ramo, quindi verifica il ramo corrente.
  • Il doppio trattino ( --) dice a Git che ciò che segue dovrebbe essere preso come secondo argomento (percorso), che hai ignorato la specifica di un ramo.
  • Il punto ( .) indica tutti i percorsi.

Se si desidera rimuovere i file aggiunti dall'ultimo commit, utilizzare clean( documentato qui ):

git clean -i 
  • L' -iopzione avvia un interattivo clean, per evitare cancellazioni errate.
  • Una manciata di altre opzioni sono disponibili per un'esecuzione più rapida; vedi la documentazione.

Se si desidera spostare le modifiche in uno spazio di attesa per un accesso successivo , utilizzare stash( documentato qui ):

git stash
  • Tutte le modifiche verranno spostate in Git's Stash, per un possibile accesso successivo.
  • Una manciata di opzioni sono disponibili per uno stashing più sfumato; vedi la documentazione.

Questo convertirà esattamente le tue modifiche e scarterà i nuovi file aggiunti dal precedente commit.
Yohan Chung,

votato a favore per la spiegazione :)
Archie G. Quiñones,

62

Ho davvero trovato utile questo articolo per spiegare quando usare quale comando: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

Ci sono un paio di casi diversi:

  1. Se non hai messo in scena il file, allora lo usi git checkout. Acquista "aggiorna i file nella struttura di lavoro in modo che corrispondano alla versione nell'indice". Se i file non sono stati messi in scena (ovvero aggiunti all'indice) ... questo comando ripristinerà essenzialmente i file con l'ultimo commit.

    git checkout -- foo.txt

  2. Se il file è stato messo in scena, utilizzare git reset. Ripristina cambia l'indice in modo che corrisponda a un commit.

    git reset -- foo.txt

Sospetto che l'utilizzo git stashsia una scelta popolare poiché è un po 'meno pericoloso. Puoi sempre tornare indietro se accidentalmente soffi troppo lontano quando usi git reset. Il ripristino è ricorsivo per impostazione predefinita.

Dai un'occhiata all'articolo sopra per ulteriori consigli.


60

Il modo più semplice per farlo è usando questo comando:

Questo comando viene utilizzato per annullare le modifiche nella directory di lavoro -

git checkout -- .

https://git-scm.com/docs/git-checkout

Nel comando git, lo stash di file non tracciati si ottiene usando:

git stash -u

http://git-scm.com/docs/git-stash


19
Due volte sono venuto qui, ho letto questa risposta e .alla fine ho dimenticato . Per me futuro: il periodo è essenziale !
Bejado,

2
Avevo bisogno di sbarazzarmi di tutte le modifiche locali in una sottodirectory, senza spazzare via ogni altra modifica. Questa risposta mi ha aiutato molto, grazie
Ally,

2
Descrivi cosa fanno i due comandi. È davvero inutile non avere spiegazioni.
Chris Kennedy,

2
eccellente. il checkout fa in un comando ciò che il più popolare fa in due. può anche essere seguito git clean -fdper pulire i file non presenti nell'indice.
oligofren,

49

Se non sei interessato a mantenere le modifiche non messe in scena (specialmente se le modifiche messe in scena sono nuovi file), l'ho trovato utile:

git diff | git apply --reverse

44

git checkout -f


man git-checkout:

-f, --force

Quando si cambiano rami, procedere anche se l'indice o l'albero di lavoro differisce da HEAD. Viene utilizzato per eliminare le modifiche locali.

Quando si estraggono percorsi dall'indice, non fallire su voci non unite; invece, le voci non unite vengono ignorate.


2
Questo eliminerebbe le modifiche nell'indice !! (E il PO richiede di lasciarli così come sono.)
Robert Siemer,

44

Mentre digiti lo stato git, viene mostrato (usa "git checkout - ..." per scartare le modifiche nella directory di lavoro) .

per esempio git checkout -- .


1
Sottovalutato perché non aiuta a scartare rapidamente tutti i file. I tre punti indicano che è necessario elencare tutti i file. Ciò è particolarmente negativo se devi scartare tonnellate di file contemporaneamente, ad es. durante una grande fusione dopo aver messo in scena tutte le modifiche che desideri mantenere
usr-local-ΕΨΗΕΛΩΝ

2
Naturalmente, il comando corretto è "git checkout -." un singolo punto. Nel commento, i tre punti erano una cosa grammaticale, per indicare che ci sono molte altre opzioni che avrebbero potuto essere usate ..
Josef.B,

39

Puoi usare git stash - se qualcosa va storto, puoi comunque tornare dalla scorta. Simile ad un'altra risposta qui, ma questa rimuove anche tutti i file non messi in scena e anche tutte le eliminazioni non messe in scena:

git add .
git stash

se controlli che tutto sia OK, getta via la scorta:

git stash drop

Anche la risposta di Bilal Maqsood git cleanha funzionato per me, ma con la scorta ho un maggiore controllo - se lo faccio accidentalmente, posso ancora ottenere le mie modifiche

AGGIORNARE

Penso che ci sia 1 altro cambiamento (non so perché questo ha funzionato per me prima):

git add . -A invece di git add .

senza i -Afile rimossi non verranno messi in scena


39

Aggiornamento 2019:

Dal luglio 2019 , v'è stato un nuovo comando, che fa esattamente questo: git restore.

In git status, ora Git consiglia di utilizzare questo comando anziché git checkoutcome una volta.

Mentre questo comando può anche essere utilizzato per ripristinare l'albero di lavoro su un commit specifico o per ripristinare il contenuto dell'indice, per impostazione predefinita, l'albero di lavoro viene ripristinato allo stato nell'indice (cosa viene richiesto qui).

Quindi, per ripristinare i file corrispondenti a un pathspec (eliminando le loro modifiche non messe in scena), dovresti:

git restore <pathspec>

Ad esempio, per ripristinare tutte le modifiche non messe in scena nella directory corrente, è possibile eseguire:

git restore .

Se lo esegui dalla radice del progetto, ripristinerà tutte le modifiche non messe in scena nell'intero repository.

Si noti che, come nel caso di git checkout -- .(come sottolineato da Mariusz Nowak), questo annullerà solo le modifiche ai file tracciati da Git e non eliminerà alcun nuovo file non tracciato. Se si desidera annullare eventuali modifiche non organizzate, inclusi i nuovi file non monitorati, è possibile eseguire un ulteriore:

git clean -df

Presta molta attenzione con questo comando successivo, poiché potresti scartare i file di cui non hai intenzione di sbarazzarti.


Nota su git restore: poiché si tratta di un nuovo comando, la sua pagina man fornisce un avviso:

Questo comando è sperimentale. Il comportamento potrebbe cambiare.

Quindi è possibile che questa risposta possa diventare obsoleta se il comportamento dovesse cambiare in futuro. Potrebbe quindi essere saggio eseguire un veloce man git-restoreprima di usarlo.


2
Volevo ripristinare le mie modifiche non messe in scena solo senza influire sui file aggiunti di recente, quindi ha git restore .funzionato perfettamente. Grazie.
Saurabh Misra

3
L'ho fatto git restore <filename>e ha funzionato perfettamente.
Merlino

1
Ha funzionato bene per me.
Prometeo

1
Secondo la pagina man git restore .ripristina tutti i file nella directory corrente, non nell'intero repository.
jarno

1
Hai ragione. Grazie! L'ho appena provato e, in effetti, è così. È, tuttavia, ricorsivo. Quindi, quando eseguito dalla radice del progetto, si applica all'intero repository. Modificherò la mia risposta.
prosoitos

35

Invece di annullare le modifiche, ripristino l'origine del telecomando. Nota: questo metodo consente di ripristinare completamente la cartella in quella del repository.

Quindi faccio questo per assicurarmi che non siedano lì quando reimposta git (in seguito - esclude gitignores sul nome di origine / ramo)

NOTA: se si desidera mantenere i file non ancora tracciati, ma non in GITIGNORE, è possibile saltare questo passaggio, poiché verranno cancellati questi file non tracciati non trovati sul repository remoto (grazie @XtrmJosh).

git add --all

Quindi io

git fetch --all

Quindi ho ripristinato l'origine

git reset --hard origin/branchname

Ciò lo riporterà al punto di partenza. Proprio come ri-clonare il ramo, MENTRE mantenendo tutti i miei file gitignored localmente e sul posto.

Aggiornamento per commento utente di seguito: Variazione per reimpostare il ramo corrente su cui si trova l'utente.

git reset --hard @{u}

Questa è la mia opzione preferita, ma perché prima aggiungi tutte le modifiche? Per quanto ne so, questo modifica solo l'elenco delle directory nei file Git, mentre usando git reset --hard, questo andrà perso comunque mentre le directory verranno comunque rimosse.
XtrmJosh,

Non su Mac o Linux, a volte Github Windows PowerShell lascia i file lì dopo il ripristino. Penso che sia perché git reset imposta tutti i file nel repository al suo stato originale. Se non vengono aggiunti, non vengono toccati. Il client desktop prenderà quindi "hey questo file è qui e deve essere impegnato"
Nick

Senso fatto. Non uso Windows, quindi non ho riscontrato questo problema (non ho usato Windows negli ultimi mesi, non ricordo molto prima, è un enorme sfocato deplorevole). Vale la pena notare la logica della risposta principale :)
XtrmJosh,

Ho riscontrato questo problema anche su un Mac ora. Se il file non viene tracciato in Repo, a volte git reset non lo tocca. Non riesco davvero a isolare il "PERCHE '" ma quando ciò accade, se ripristino, e ho ancora 1 o 2 file senza commit, aggiungo - tutti e resetto
Nick

2
Una piccola variazione di questo che mi piace è git reset --hard @{u}che reimposta il ramo ovunque si trovi l'attuale ramo di tracciamento remoto
user2221343

31

Ho provato tutte le soluzioni sopra ma ancora non riuscivo a liberarmi di nuovi file non messi in scena.

Utilizzare git clean -fper rimuovere quei nuovi file - con cautela però! Nota l'opzione forza.


21

dì semplicemente

git stash

Rimuoverà tutte le modifiche locali. Puoi anche usarlo in seguito dicendo

git stash apply 

o git stash pop


21

Usa solo:

git stash -u

Fatto. Facile.

Se ti interessa davvero il tuo stack, puoi seguirlo git stash drop. Ma a quel punto stai meglio usando (da Mariusz Nowak):

git checkout -- .
git clean -df

Tuttavia, mi piace git stash -uil meglio perché "elimina" tutte le modifiche tracciate e non tracciate in un solo comando . Eppure, git checkout -- .solo scarti rintracciato modifiche e git clean -dfcambiamenti solo scarti non monitorate ... e digitando entrambi i comandi è di gran lunga troppo lavoro :)


Nota: git stash -usarà presto (Git 2.14.x / 2.15, Q3 2017) evolvere un po ': stackoverflow.com/a/46027357/6309
VonC

Se ricevo la domanda dell'OP corretta, i file indicizzati devono essere conservati. Devono essere rimosse solo le modifiche sul palco. Quindi dovrebbe essere git stash -ksecondo me.
scatta l'

21

Per eseguire uno scarto permanente: git reset --hard

Per salvare le modifiche per dopo: git stash


16

Funziona anche in directory che lo sono; al di fuori delle normali autorizzazioni git.

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

Mi è successo di recente


Attenzione però che il contenuto ignorato da Git non manterrà le autorizzazioni originali! Quindi può causare un rischio per la sicurezza.
volte il

@twicejr Ti sbagli, per favore leggi git help clean"-d Rimuovi le directory non tracciate oltre ai file non tracciati."
GlassGhost il

Perché hai impostato tutti i tuoi file come lettura / scrittura mondiale? Non è una buona pratica.
Ghoti,

@Ghoti il ​​mio male, 664 è corretto? sei anche invitato a modificare la risposta.
GlassGhost,

L'impostazione di tutte le autorizzazioni su 664 fa molte ipotesi sul tipo di autorizzazioni necessarie al progetto. Penso che l'uso di quella parte del comando causerà problemi ad alcune persone.
ianrandmckenzie,


14
cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory

12

Secondo me,

git clean -df

dovrebbe fare il trucco. Come da documentazione Git su git clean

git-clean - Rimuove i file non tracciati dall'albero di lavoro

Descrizione

Pulisce l'albero di lavoro rimuovendo in modo ricorsivo i file che non sono sotto il controllo della versione, a partire dalla directory corrente.

Normalmente, vengono rimossi solo i file sconosciuti a Git, ma se viene specificata l'opzione -x, vengono rimossi anche i file ignorati. Questo può, ad esempio, essere utile per rimuovere tutti i prodotti di compilazione.

Se vengono forniti argomenti facoltativi, vengono interessati solo quei percorsi.

Opzioni

-d Elimina le directory non tracciate oltre ai file non tracciati. Se una directory non tracciata è gestita da un diverso repository Git, non viene rimossa per impostazione predefinita. Utilizzare l'opzione -f due volte se si desidera veramente rimuovere tale directory.

-f --force Se la variabile di configurazione Git clean.requireForce non è impostata su false, git clean rifiuterà l'esecuzione a meno che non sia dato -f, -n o -i.


11

Indipendentemente dallo stato in cui si trova il tuo repository, puoi sempre ripristinare qualsiasi commit precedente:

git reset --hard <commit hash>

Ciò eliminerà tutte le modifiche apportate dopo tale commit.


2
Questo eliminerà anche tutto nell'indice (non solo le cose non nell'indice), che va oltre ciò che l'OP chiede.
Linus Arver,

10

Un altro modo per sbarazzarsi di nuovi file che è più specifico di git clean -df (ti consentirà di sbarazzarti di alcuni file non necessariamente tutti), è quello di aggiungere prima i nuovi file all'indice, quindi stash, quindi rilasciare il scorta.

Questa tecnica è utile quando, per qualche motivo, non è possibile eliminare facilmente tutti i file non monitorati da un meccanismo ordinario (come rm).


9

Quella che segue è davvero solo una soluzione se stai lavorando con un fork di un repository in cui ti sincronizzi regolarmente (ad es. Richiesta pull) con un altro repository. Risposta breve: elimina fork e refork, ma leggi gli avvisi su github .

Ho avuto un problema simile, forse non identico, e sono triste a dire che la mia soluzione non è l'ideale, ma alla fine è efficace.

Avrei spesso messaggi di stato git come questo (che coinvolgono almeno 2/4 file):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

Un occhio attento noterà che questi file hanno doppleganger che sono una singola lettera nel caso in cui siano spenti. In qualche modo, e non ho idea di cosa mi abbia portato in questo percorso per iniziare (dato che non stavo lavorando con questi file dal repository upstream), avevo cambiato questi file. Prova le molte soluzioni elencate in questa pagina (e in altre pagine) non sembra essere d'aiuto.

Sono stato in grado di risolvere il problema eliminando il mio repository biforcuto e tutti i repository locali e ripristinando. Questo da solo non era abbastanza; upstream ha dovuto rinominare i file in questione con nuovi nomi di file. Fintanto che non hai alcun lavoro senza impegno, nessun wiki e nessun problema che diverge dal repository a monte, dovresti andare bene. A monte potrebbe non essere molto felice con te, per non dire altro. Per quanto riguarda il mio problema, è senza dubbio un errore dell'utente in quanto non sono così abile con Git, ma il fatto che sia tutt'altro che facile risolvere punti su un problema con Git.


7

Quando vuoi trasferire una scorta a qualcun altro:

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

[modifica] come commentato, è possibile nominare gli stash. Bene, usa questo se vuoi condividere la tua scorta;)


5
In realtà Git Stash può avere un titolo. Per esempio git stash save "Feature X work in progress".
Colin D Bennett,

7

Potresti creare il tuo alias che descrive come farlo in modo descrittivo.

Uso l'alias successivo per annullare le modifiche.


Elimina le modifiche in un (elenco di) file nella struttura ad albero di lavoro

discard = checkout --

Quindi puoi usarlo come accanto per annullare tutte le modifiche:

discard .

O solo un file:

discard filename

Altrimenti, se vuoi annullare tutte le modifiche e anche i file non tracciati, utilizzo un mix di checkout e clean:

Pulisci ed elimina le modifiche e i file non tracciati nell'albero di lavoro

cleanout = !git clean -df && git checkout -- .

Quindi l'uso è semplice come il prossimo:

cleanout

Ora è disponibile nel prossimo repository Github che contiene molti alias:


7

Ho avuto una strana situazione in cui un file è sempre non messo in scena, questo mi aiuta a risolvere.

git rm .gitattributes
git add -A
git reset --hard

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.