Full Stack

Rimuovere le modifiche ad un file in Git

Autore

Manuel Ricci

Torniamo a lavorare con i nostri file e nello specifico a rimuovere le modifiche che sono state fatte prima dello staging e prima della commit.

Rimuovere le modifiche ad un file prima dello staging

Per rimuovere le modifiche ad un file che ancora non è stato aggiunto alla staging area possiamo agire in due modi. Con git checkout e git restore.

Rimuovere le modifiche con git checkout

Git checkout l’abbiamo già usato in precedenza e si sta rivelando super versatile. Supponiamo di essere in una situazione simile a questa:

1$ git status
2On branch main
3Changes not staged for commit:
4  (use "git add <file>..." to update what will be committed)
5  (use "git restore <file>..." to discard changes in working directory)
6        modified:   index.txt
7
8no changes added to commit (use "git add" and/or "git commit -a")

Ho fatto una modifica al mio file index.txt che però voglio scartare. Nel mondo reale potrebbe essere un test che avete voluto fare, testare, ma che non è andato a buon fine e quindi piuttosto che eliminare tutto a manina potete avvalervi di Git.

Per ripristinare il file con l’ausilio di git checkout basterà scrivere:

1$ git checkout index.txt
2Updated 1 path from the index
3$ git status
4On branch main
5nothing to commit, working tree clean

Rimuovere le modifiche con git restore

L’altro metodo che abbiamo a disposizione è con l’ausilio di git restore. L’occhio più attento avrà visto che lo consigliava anche git status negli esempi precedenti. Quindi, ipotizzando di essere di nuovo nella versione iniziale

1$ git status
2On branch main
3Changes not staged for commit:
4  (use "git add <file>..." to update what will be committed)
5  (use "git restore <file>..." to discard changes in working directory)
6        modified:   index.txt
7
8no changes added to commit (use "git add" and/or "git commit -a")

Basterà eseguire il comando:

1$ git restore index.txt

e il gioco è fatto.

Rimuovere le modifiche ad un file nella staging area

Mentre prima non avevamo ancora aggiunto i file modificati alla staging area, qualora avessimo già eseguito git add, come dovreste comportarvi? Niente di fantascientifico, basta usare i flag giusti.

1On branch main
2Changes to be committed:
3  (use "git restore --staged <file>..." to unstage)
4        modified:   index.txt

La situazione è semplice, abbiamo modificato un file e aggiunto alla staging area, come lo rimuoviamo? Anche qui possiamo muoverci in due modi.

Rimuovere le modifiche con git reset

Il primo comando che possiamo usare è git reset, in questo modo:

1$ git reset HEAD index.txt
2Unstaged changes after reset:
3M       index.txt

Il risultato è scontato: il file viene rimosso dalla staging area, mantenendo le modifiche apportate.

Rimuovere le modifiche con git restore

Anche in questo caso se siete stati attenti il git status di prima ci ha già spifferato come fare a rimuovere il file dalla staging area, con git restore stavolta però seguito da una flag --staged. In questo modo:

1$ git restore --staged index.txt

E anche qui il gioco è fatto. Personalmente preferisco restore un comando solo per tutti e due gli scenari.

Ricordate che per tutti gli esempi visti adesso potete separare più file con uno spazio o includere tutto con un punto.

Conclusioni

Lezione veloce, assolutamente pratica, ma con nozioni che dobbiamo tenere a mente quando lavoriamo con Git. Nella prossima lezione vedremo come annullare le modifiche salvate.

Caricamento...

Diventiamo amici di penna? ✒️

Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.

Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!

Ho in previsione di mandarti una newsletter ogni due settimane e una commerciale quando capita.