Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Annullamento di un Commit Specifico | Annullamento Delle Modifiche
Nozioni Fondamentali di Git

bookAnnullamento di un Commit Specifico

git revert

Come già menzionato, per annullare uno specifico commit si utilizza il comando git revert. Questo comando crea un nuovo commit che annulla le modifiche introdotte dal commit specificato. La sintassi di base è la seguente:

git revert <commit-hash>

Come si può notare, invece di utilizzare HEAD come fatto per annullare l’ultimo commit, ora è necessario specificare l’hash di un particolare commit (ID del commit) che si desidera annullare (sostituire <commit-hash> con un hash valido).

Approfondimento sugli Hash

Ricordare che ogni commit possiede un ID univoco che è essenzialmente una stringa di cifre (0-9) e lettere (a-f), ovvero una stringa esadecimale. Questa stringa di 40 caratteri è chiamata hash. Osserviamo il nostro ultimo commit:

Ecco il suo hash:

1b00736255dca7d78659a9971d0c30fba0eb3075

Note
Nota

Avrai un hash diverso per questo commit per il motivo spiegato di seguito.

L'hash del commit viene calcolato utilizzando l'algoritmo SHA-1 sulla base delle seguenti informazioni:

  • Messaggio del commit;
  • Data;
  • Autore;
  • Snapshot della working tree;
  • Hash del commit genitore (o dei commit genitori se ce n'è più di uno).

Se il commit è il primo nel repository, allora l'hash del commit genitore apparentemente non viene calcolato.

Poiché tutte queste informazioni del commit vengono utilizzate per calcolare il suo hash, l'utilizzo degli hash come ID dei commit garantisce la coerenza del repository. Inoltre, la probabilità che due commit diversi abbiano lo stesso hash (probabilità di collisione) è estremamente bassa, quindi è molto improbabile che accada per caso.

Fondamentalmente, se qualcosa viene modificato nel commit, anche il suo hash cambierà. Questo significa che, nel caso in cui i dati vengano corrotti per qualsiasi motivo, Git può utilizzare l'hash per identificarlo.

Note
Nota

Quando si modifica un commit, l'ID del commit cambia, motivo per cui è preferibile non utilizzare il comando git commit --amend quando si lavora con repository remoti.

Esempio di flusso di lavoro

Prima di decidere quale commit annullare, diamo un'occhiata agli ultimi quattro commit:

Possiamo vedere che c'è un commit in cui è stato aggiunto il file recipe.txt. Annulliamo questo commit creando un nuovo commit che annullerà queste modifiche ed essenzialmente eliminerà il file. Nel mio caso il suo hash è il seguente:

043b634d76a7a7744757350512b6367417c29e0

Tuttavia, il tuo hash per questo commit sarà diverso. Ora possiamo annullare questo commit:

Sostituisci questo hash con il tuo hash.

Ancora una volta, si apre l'editor di testo predefinito con il messaggio di commit predefinito per l'annullamento. Lo lasciamo invariato.

Successivamente, chiudiamo correttamente l'editor di testo e mostriamo le modifiche apportate in quest'ultimo commit:

7 eliminazioni sono avvenute, il che significa che tutte le 7 righe del file sono state eliminate. Ora verifichiamo che il file stesso sia stato eliminato elencando tutti i file e le directory non nascosti nella nostra directory di progetto:

Abbiamo eliminato con successo il file recipe.txt.

question-icon

Abbina le azioni ai rispettivi comandi.


Revert the latest commit:

Revert a specific commit:

Unstage changes:

Revert unstaged changes:

Unstage changes and then revert the changes in the working directory:

Overwrite the existing commit:

Click or drag`n`drop items and fill in the blanks

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 5

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 3.57

bookAnnullamento di un Commit Specifico

Scorri per mostrare il menu

git revert

Come già menzionato, per annullare uno specifico commit si utilizza il comando git revert. Questo comando crea un nuovo commit che annulla le modifiche introdotte dal commit specificato. La sintassi di base è la seguente:

git revert <commit-hash>

Come si può notare, invece di utilizzare HEAD come fatto per annullare l’ultimo commit, ora è necessario specificare l’hash di un particolare commit (ID del commit) che si desidera annullare (sostituire <commit-hash> con un hash valido).

Approfondimento sugli Hash

Ricordare che ogni commit possiede un ID univoco che è essenzialmente una stringa di cifre (0-9) e lettere (a-f), ovvero una stringa esadecimale. Questa stringa di 40 caratteri è chiamata hash. Osserviamo il nostro ultimo commit:

Ecco il suo hash:

1b00736255dca7d78659a9971d0c30fba0eb3075

Note
Nota

Avrai un hash diverso per questo commit per il motivo spiegato di seguito.

L'hash del commit viene calcolato utilizzando l'algoritmo SHA-1 sulla base delle seguenti informazioni:

  • Messaggio del commit;
  • Data;
  • Autore;
  • Snapshot della working tree;
  • Hash del commit genitore (o dei commit genitori se ce n'è più di uno).

Se il commit è il primo nel repository, allora l'hash del commit genitore apparentemente non viene calcolato.

Poiché tutte queste informazioni del commit vengono utilizzate per calcolare il suo hash, l'utilizzo degli hash come ID dei commit garantisce la coerenza del repository. Inoltre, la probabilità che due commit diversi abbiano lo stesso hash (probabilità di collisione) è estremamente bassa, quindi è molto improbabile che accada per caso.

Fondamentalmente, se qualcosa viene modificato nel commit, anche il suo hash cambierà. Questo significa che, nel caso in cui i dati vengano corrotti per qualsiasi motivo, Git può utilizzare l'hash per identificarlo.

Note
Nota

Quando si modifica un commit, l'ID del commit cambia, motivo per cui è preferibile non utilizzare il comando git commit --amend quando si lavora con repository remoti.

Esempio di flusso di lavoro

Prima di decidere quale commit annullare, diamo un'occhiata agli ultimi quattro commit:

Possiamo vedere che c'è un commit in cui è stato aggiunto il file recipe.txt. Annulliamo questo commit creando un nuovo commit che annullerà queste modifiche ed essenzialmente eliminerà il file. Nel mio caso il suo hash è il seguente:

043b634d76a7a7744757350512b6367417c29e0

Tuttavia, il tuo hash per questo commit sarà diverso. Ora possiamo annullare questo commit:

Sostituisci questo hash con il tuo hash.

Ancora una volta, si apre l'editor di testo predefinito con il messaggio di commit predefinito per l'annullamento. Lo lasciamo invariato.

Successivamente, chiudiamo correttamente l'editor di testo e mostriamo le modifiche apportate in quest'ultimo commit:

7 eliminazioni sono avvenute, il che significa che tutte le 7 righe del file sono state eliminate. Ora verifichiamo che il file stesso sia stato eliminato elencando tutti i file e le directory non nascosti nella nostra directory di progetto:

Abbiamo eliminato con successo il file recipe.txt.

question-icon

Abbina le azioni ai rispettivi comandi.


Revert the latest commit:

Revert a specific commit:

Unstage changes:

Revert unstaged changes:

Unstage changes and then revert the changes in the working directory:

Overwrite the existing commit:

Click or drag`n`drop items and fill in the blanks

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 5
some-alt