Passa al contenuto principale Passa alla navigazione Passa al piè di pagina
A tempo limitato: Programma Design Partner. Piano BUSINESS gratuito per sempre.

Branching: Commit e Rollback

Congela gli stati del repository in commit immutabili, assegna loro nomi con i branch e ripristina qualsiasi commit come fork scrivibile.

Branching: Commit e Rollback

Versiona i tuoi repository come fosse codice. Un commit congela un fork in un’immagine immutabile; un branch gli assegna un nome; checkout trasforma qualsiasi commit in un fork scrivibile fresco. In questo tutorial facciamo il commit di uno stato noto come buono, eliminiamo una tabella PostgreSQL reale e recuperiamo ogni riga in pochi secondi.

Guarda il tutorial

Il modello

Commit, branch, checkout

I commit non cambiano mai: si rifiutano persino di montarsi. I fork non aspettano: il checkout è un clone reflink quasi istantaneo. Il modello mentale completo si trova nella guida al branching.

Crea un checkpoint

Un file marcatore rende visibile la versione, e un database reale rende il rollback significativo: la tabella customers contiene tre righe.

rdc term connect --machine <machine-name> --repository app:work --command 'echo v1 > version.txt && cat version.txt'

Scrivi la versione uno del tuo stato nel fork di lavoro.

rdc term connect --machine <machine-name> --repository app:work --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"'

Il fork esegue anche un vero database PostgreSQL: la tabella customers contiene tre righe.

rdc repo commit --name app:work --message 'v1 baseline' --machine <machine-name>

Committa il fork di lavoro: l'intero stato del repository, database incluso, viene congelato in uno snapshot immutabile e con nome.

rdc repo branch --branch stable --name app:work

Crea un branch che punta al commit, un nome leggibile per lo stato congelato.

Il commit cattura tutto: i file e la directory dei dati di PostgreSQL. Il branch stable ora denomina quello stato congelato.

Continua a lavorare

rdc term connect --machine <machine-name> --repository app:work --command 'echo v2 > version.txt && cat version.txt'

Continua a lavorare: il fork cambia, la cronologia committata rimane congelata.

Il disastro

Una modifica rischiosa elimina la tabella. Poi la query conferma che il danno è reale.

rdc term connect --machine <machine-name> --repository app:work --command 'docker exec db psql -U app -d app -c "DROP TABLE customers"'

La modifica rischiosa elimina la tabella customers nel fork di lavoro.

rdc term connect --machine <machine-name> --repository app:work --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"'

Interrogare la tabella ora fallisce: relation "customers" does not exist. I dati sono davvero spariti dal fork di lavoro.

ERROR: relation "customers" does not exist. Tre righe, sparite. Nella vita reale è il momento in cui ti cade lo stomaco; qui è la premessa per il lieto fine.

rdc repo commit --name app:work --message 'v2 risky change' --machine <machine-name>

Committa anche il nuovo stato, tabella eliminata inclusa; la cronologia cresce come un git log.

rdc repo log --name app:work --machine <machine-name>

Esplora la cronologia dei commit con repo log: messaggi, autori, parent.

La cronologia registra quello che è davvero successo, stato rotto incluso: v2 risky change sopra, v1 baseline sotto.

Rollback in pochi secondi

rdc repo checkout --ref stable --from app:work --tag rollback --machine <machine-name>

Fai il checkout del branch stable in un nuovo fork scrivibile, quasi istantaneo grazie al copy-on-write.

rdc repo up --name app:rollback --machine <machine-name>

Avvia il fork di rollback, viene eseguito insieme al fork di lavoro.

rdc term connect --machine <machine-name> --repository app:rollback --command 'cat version.txt'

Leggi il file marker nel fork di rollback: versione uno, esattamente come committata.

rdc term connect --machine <machine-name> --repository app:rollback --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"'

Interroga la tabella customers nel fork di rollback: tre righe, esattamente come committate. Il rollback ha ripristinato il database, non solo i file.

Il fork di rollback legge v1, e la tabella customers è tornata con tutte e tre le righe. Il rollback ha ripristinato il database, non solo i file. Nulla è stato sovrascritto: il fork di lavoro mantiene ancora la versione due, e il video apre entrambi in VS Code per dimostrarlo.


Successivo: Migrazione Live.