Ho esperienza nell'uso di svn e recentemente ho iniziato a imparare git. Sono rimasto piuttosto scioccato nell'apprendere che git ha funzionalità che ti consentono di "riscrivere la cronologia".
Venendo da svn, avevo accettato come sacrosanto il principio del controllo del codice che una volta che un cambiamento è stato eseguito, non c'è modo di "annullare" il commit stesso ... il massimo che si può fare è eseguire un commit successivo che effettivamente " inverte "le modifiche apportate al commit precedente, ma si può sempre riprodurre lo stato di qualsiasi commit eseguito in passato.
Qual è la logica per cambiare questo "principio"? C'è qualcosa di diverso in git che lo rende OK, o la progettazione di git riflette una "filosofia" diversa del controllo del codice sorgente che differisce dalla "filosofia" di svn?