Come ripristinare singoli file e cartelle su vecchie versioni in Git

Come ripristinare singoli file e cartelle su vecchie versioni in Git

Git è un potente strumento per tenere traccia di ogni versione della tua base di codice ed è spesso necessario tornare indietro e ripristinare le versioni precedenti dei file. Git può ripristinare tutti i commit o ripristinare un intero repository, ma può anche ripristinare le modifiche a un singolo file o cartella.

Ritorno vs Reset

Normalmente, quando “ripristina” un commit, Git applica il nuovo commit, applicando le modifiche opposte, ripristinandolo effettivamente. Questo è utile se commetti un errore e devi “rimuovere” quel commit anche se è ancora nella cronologia.

Il ripristino di un repository è leggermente diverso. Puoi annullare solo un commit alla volta, ma se lo fai git reset, Git invertirà lo stato del repository nel momento in cui è stato eseguito il commit. Questo viene fatto per molte ragioni, di solito per rimuovere i commit o correggere la cronologia del ramo.

Entrambe queste operazioni funzionano sull’intero repository, ma puoi anche utilizzare comandi simili per eseguire le stesse azioni su singoli file o cartelle. Ad esempio, l’utilizzo git reset su un singolo file riporterà quel file allo stato in cui si trovava quando è stato eseguito il commit. Questo è utile se vuoi solo selezionare una versione precedente di un file dalla cronologia di Git.

Visualizzazione delle versioni precedenti in Git

La soluzione a bassa tecnologia per ripristinare un file allo stato precedente è abbastanza semplice: Github e la maggior parte degli altri server Git tengono traccia della cronologia dei file e puoi semplicemente fare clic su un commit e fare clic su Sfoglia file per visualizzare il file. un’istantanea del tuo repository dal passato. È quindi possibile scaricare il file o copiare il testo.

Ciò è particolarmente utile se stai lavorando con file di codice di grandi dimensioni e desideri rivedere le versioni precedenti delle funzioni che hai scritto. Probabilmente non vuoi restituire tutto in questo caso, solo una funzione. Puoi copiare il codice per questa funzione senza toccare Git CLI.

Reimpostare un file su una versione precedente in Git

In questo repository di prova, abbiamo creato un commit che ha modificato il README e aggiunto un nuovo file. Vogliamo ripristinare le modifiche apportate al README, ma non vogliamo ripristinare l’intero repository al commit originale.

La soluzione è ripristinare il README solo controllando la vecchia versione di quel file. Il comando Git checkout fa molte cose, come cambiare branch, ma è usato principalmente per caricare file con un determinato commit o branch ID.

Per ripristinare un file a una versione precedente, devi trovare l’ID commit da cui desideri ripristinare. È possibile utilizzare git log l’ambito del file singolo per visualizzare solo le modifiche apportate a quel file:

git log README.md

Copia l’id del commit e quindi esegui git checkout con l’id e il percorso del file:

git checkout 22710694b25d7ce5297559851beb7d3e4de811bb README.md

Ciò modificherà nuovamente il file, ma non eseguirà ancora il commit delle modifiche. Puoi modificarlo e impegnarti quando sei pronto.

In questo esempio git checkout , le modifiche vengono preparate per il commit successivo. Se non vuoi eseguirne il commit, puoi annullare le modifiche. Questo può essere utile per scaricare temporaneamente versioni precedenti di file senza utilizzare Github.

Ripristino delle modifiche ai singoli file

Allo stesso modo, se vuoi ripristinare le modifiche in un singolo commit, puoi farlo con git revert. Tuttavia, non c’è modo di applicarlo a un file, ma puoi semplicemente annullare le modifiche se il commit interessa altri file.

Usa questo --no-commit flag per abilitare la modifica del “commit ripristinato” che Git crea automaticamente.

git revert de8564b131ca6a15a7e7c73f5ef156b119cc0b93

Ciò ti consentirà di modificare i file prima di completare il reso. Se sono presenti modifiche indesiderate, puoi rimuoverle tramite il tuo client o con un  git checkout.

git checkout -- file

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *