Può annullare un checkout di file non organizzati


164

Ho accidentalmente scartato le mie modifiche sui file nel mio albero di lavoro locale tramite git checkout. I file non sono in scena in questo momento. È possibile "annullare" questo checkout?


No, non possiamo, ma se stai usando eclipse possiamo controllare Team -> Cronologia locale
USM

Risposte:


105

Credo che se un file viene modificato ma non ancora aggiunto (messo in scena), è puramente "privato".
Significa che non può essere ripristinato da GIT se sovrascritto con l'indice o la versione HEAD (a meno che tu non abbia una copia del tuo lavoro attuale da qualche parte). "

Un contenuto "privato" è visibile solo nella directory corrente, ma non è registrato in alcun modo in Git.


5
Comprendo che le modifiche a un file "privato" non possono essere annullate da Git. Tuttavia, se il file è stato modificato da git (ad es. Via git checkout --), mi aspetto che sia in grado di annullare quell'operazione, magari tramite reflog. È un'aspettativa sbagliata?
Ciprian Tomoiagă,

2
@CiprianTomoiaga reflog è per ultimi senza riferimenti commit. Se ciò che si desidera ripristinare non è stato eseguito il commit (o messo in scena), reflog non ti aiuterà.
VonC,

3
@CiprianTomoiaga per qualsiasi tipo di contenuto privato (non ancora aggiunto), faresti affidamento esclusivamente sul tuo editor o funzionalità IDE. Esempio per eclipse: help.eclipse.org/neon/…
VonC,

5
Wow! Unbelieable. Avevo bisogno di controllare un file, quindi intendevo digitare git checkout folders/subfolders/filema premere invio per sbaglio dopo aver ottenuto foldere perso tutto il mio lavoro. / è a 1 cm da invio sulla mia tastiera e passo spesso da una macchina all'altra con diversi layout di tastiera, quindi ci sono spesso 10-15 minuti delle mie dita per abituarmi a nuove posizioni. Difficile credere nel 2018 che git cestinasse i file anche se nel libro git dice che git fa del suo meglio per non perdere lavoro.
Gman,

1
@gman la seguente risposta sulla "storia locale" fornita da un IDE ti aiuta a recuperare il tuo lavoro?
VonC

173

Se si utilizza un IDE "professionale" è probabile che sia possibile ripristinare i file da una cronologia locale. In Rubymine, ad esempio, puoi fare clic con il pulsante destro del mouse sui file e guardare una cronologia delle modifiche indipendenti dalle modifiche git, salvatemi alcune volte ora ^^


36
Cordiali saluti, questa funzione è disponibile nell'intera famiglia di IDE "professionali" JetBrains: Pycharm, IDEA, PHPStorm, Webstorm. Ho salvato il mio bakken oggi. Grazie Christoph!
Ben Roberts,

6
Ti devo ringraziare Uso WebStorm e mi sono completamente dimenticato di quella funzionalità, anche se lo uso abbastanza spesso. Ero così preso dalla perdita di codice, non ci ho pensato!
Tyson Phalp,

8
In eclipse puoi fare clic con il tasto destro del mouse sul file -> confronta con -> storia locale
Maragues,

5
superba. Sublime2 annulla inoltre il rollback delle modifiche apportate dal checkout accidentale su disco.
shuckc,

8
Se qualcuno scopre che questo thread ha distrutto del lavoro in XCode, c'è un modo per ottenere la cronologia di AutoSave. XCode stesso non ha una voce di menu per vedere la cronologia di AutoSave, ma la memorizza. Se si aprono i file in questione in TextEdit, è possibile ripristinare e consultare la cronologia di AutoSave in File> Ripristina.
qingu,

66

Se stai lavorando in un editor come Sublime Text e il file in questione è ancora aperto, puoi premere ctrl + z e tornerà allo stato precedente al checkout di git.


9
Questa risposta mi ha salvato la giornata. Molte grazie!
feyyaz,

Mi sono imbattuto in questa correzione per caso proprio ora e stavo per pubblicare una nuova risposta. Sembra che Sublime acquisisca Git cambiando lo stato del file nella sua cronologia delle modifiche.
Timmah,

Ha lavorato per me in Ecipse.
Anomalia,

4
Ha funzionato anche per Visual Studio Code
intotecho

44

Purtroppo le tue modifiche sono perse. Le tue modifiche private vengono semplicemente sovrascritte. Se non lo hai fatto git stashprima di effettuare il checkout ...

Prendilo dal lato più luminoso: ora puoi implementare le cose ancora meglio;)


26

Controlla la cronologia locale nel tuo IDE.


Ho appena fatto un errore nel non mettere in scena le mie modifiche e ho forzato un checkout. Ho controllato la mia cronologia locale in Android Studio (visualizza -> modifiche recenti) e ho ripristinato le ultime modifiche apportate. Maggiori informazioni qui jetbrains.com/help/idea/2016.3/…
emen

Funziona perfettamente su RubyMine, l'azione di cancellare le tue modifiche verrà definita "Modifica esterna". Grazie mille per questo Marcin, mi ha fatto risparmiare un'ora di lavoro perduto!
AndrewSouthpaw,

25

Sviluppando su OS X? Utilizzando Xcode? Probabilmente sarai fortunato!

Come descritto in un commento di qungu , OS X mantiene una cronologia delle versioni salvata automaticamente dei file, anche se non si utilizza Time Machine .

Quindi, se hai spazzato via le modifiche locali non messe in scena con una negligenza git checkout ., ecco come probabilmente puoi recuperare tutto il tuo lavoro.

Se qualcuno scopre che questo thread ha distrutto del lavoro in XCode, c'è un modo per ottenere la cronologia di AutoSave. XCode stesso non ha una voce di menu per vedere la cronologia di AutoSave, ma la memorizza. Se si aprono i file in questione in TextEdit, è possibile ripristinare e consultare la cronologia di AutoSave in File> Ripristina.

Il che è fantastico, e recuperato circa una giornata di lavoro per me, ieri.


Potresti chiedere: "Perché l'interfaccia utente da riga di comando git non è la prima VCS utilizzata per l'ingegneria del software2016 2017 20182019, almeno il backup dei file prima di spazzarli via? Come, sai, strumenti software ben scritti per circa gli ultimi tre decenni ".

O forse chiedi "Perché questa funzionalità di cronologia dei file incredibilmente fantastica è accessibile in TextEdit ma non in Xcode dove ne ho effettivamente bisogno?"

... ed entrambi, credo, ti parleranno molto del nostro settore. O forse andrai a riparare quegli strumenti. Quale sarebbe super.


2
Posso confermare che funziona. Questo mi ha fatto risparmiare ore di lavoro!
Bruno Rocha,

non ha funzionato per me perché il file in questione era Modelsfortunatamente
brahimm

@brahimm the Model?
Benjohn,

1
Questo mi ha appena risparmiato una tonnellata di angoscia. Grazie mille.
squarefrog,

1
Molto interessante: ho cliccato con il tasto destro sul mio file sorgente e ho guardato il menu "Apri con". Sia TextEdit 1.14 che TextEdit 1.6 erano lì come scelte. Solo TextEdit 1.14 aveva la possibilità di ripristinare le versioni precedenti. L'interfaccia utente è stata molto bella, proprio come TimeMachine.
bugloaf

7

In VSCODE ctrl + z (annulla) ha funzionato per me

L'ho fatto git checkout .invece digit add . e tutte le mie modifiche ai file sono state perse.

Ma ora usando command + znel mio mac, ho recuperato le modifiche e salvato un tono di lavoro per me.


c'è un altro modo per aggirare?
Abdul Manan


2

Un salvatore efficace per questo tipo di situazione è Time Machine (OS X) o un sistema di backup simile basato sul tempo. Mi ha salvato un paio di volte perché posso tornare indietro e ripristinare solo quel file.


1
Caro downvoter, potresti spiegare come potrei migliorare questa risposta?
sscirrus,

1

Mi è appena successo, ho controllato un'intera cartella contenente ore di lavoro! Fortunatamente ho scoperto che il mio IDE Netbeans mantiene una cronologia di ogni file, il che mi ha permesso di recuperare il 99% delle cose anche se avevo bisogno di sistemare alcune cose manualmente.



0

Tecnicamente sì. Ma solo in alcuni casi. Se ad esempio hai la pagina del codice in alto e fai clic su Git Checkout e ti rendi conto che hai accidentalmente verificato la pagina sbagliata o qualcosa del genere. Vai alla pagina e fai clic su Annulla. (per me, comando + z), e tornerà esattamente dove eri prima di colpire il buon vecchio checkout git.

Questo non funzionerà se la tua pagina è stata chiusa e quindi fai clic su Git Checkout. Funziona solo se la tabella codici attuale è aperta


0

Se si lavora con un / terminale cmd pronta aperto, e utilizzato tutti i comandi Git che avrebbe mostrato i cambiamenti unstaged ( diff, add -p, checkout -p, ecc), e non hanno chiuso il / cmd terminale pronta da quando, troverete i cambiamenti unstaged sono ancora disponibili se scorri verso l'alto fino a dove hai eseguito i comandi git summenzionati.


0

Tipo,

diciamo che sei un ragazzo molto fortunato proprio come lo sono stato io, torna al tuo editor e fai un annullamento (comando + Z per mac), dovresti vedere i tuoi contenuti persi nel file. Spero che ti abbia aiutato. Naturalmente, questo funzionerà solo per i file esistenti.


-1

Forse le tue modifiche non vanno perse. Controlla "git reflog"

Cito l'articolo qui sotto:

"Fondamentalmente ogni azione che esegui all'interno di Git in cui sono archiviati i dati, puoi trovarli all'interno del reflog. Git si impegna davvero a non perdere i tuoi dati, quindi se per qualche motivo pensi che abbia, è probabile che tu possa scavarli usando git reflog "

Vedi i dettagli:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html


3
Non sperare: ottenere reflog aiuta solo se hai interagito con Git in modo significativo. Stai solo modificando un file, quindi cancellandolo tramite un checkout git? git non ha mai avuto una possibilità.
Bob Gilmore,

1
+1 da parte mia - Pensa che valga la pena menzionare il git reflogqui, ho trovato questa risposta mentre cercavo di annullare un git checkout HEAD .- Avevo intenzione di digitare git reset HEAD .- Avevo appena fatto un 'git reset --soft HEAD ~ 1' e non lo sapevo circa git reflogcosì ho potuto riprendere il lavoro che avevo fatto :)
Russell Inghilterra,

1
Sfortunatamente git checkout <revision> e git checkout <path> sono due comandi completamente diversi e non correlati. Il primo mantiene le modifiche locali, il secondo no.
Lago,
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.