Venendo da uno sfondo SVN, una delle cose più difficili da abituare quando si lavora con i sistemi DVCS è il modo in cui tutti sembrano considerare qualsiasi cambiamento non impegnativo come una bomba ad orologeria.
In Mercurial, se provi a recuperare le modifiche e hai qualche modifica non vincolante nella tua copia di lavoro, devi passare da un anello all'altro per fare in modo che unisca le modifiche in entrata. Prova a cambiare rami? Ti costringerà a mettere da parte tutto e poi dovrai immediatamente annullare tutto dall'altra parte. (SVN non ha problemi con nessuno di questi scenari.)
Git è all'incirca allo stesso modo. Sto lavorando fianco a fianco con un altro sviluppatore su un progetto, e ho solo cercato di selezionare uno dei suoi commit nella mia forcella. Si è rifiutato di lasciarmi perché ho modifiche non eseguite nella mia copia di lavoro, su file completamente diversi da quelli modificati nel suo commit. Non c'è nemmeno un'opzione di unione; a quanto pare devo prima mettere da parte le mie modifiche!
Se una persona dovesse trattare qualcosa di completamente innocuo con un'estrema cautela, la chiamerei una "fobia", una paura irrazionale che dovrebbe essere considerata un disturbo mentale. Ma Git e Mercurial sono stati progettati da due team diversi di sviluppatori intelligenti e razionali, quindi devo chiedermi se sanno qualcosa di cui non sono a conoscenza.
C'è una ragione tecnica che giustifica questo atteggiamento nei confronti di modifiche non vincolanti? E se sì, perché il problema in questione sembra esistere solo su DVCSes?