Proveniente da un background SVN, una delle cose più difficili a cui abituarsi quando si lavora con i sistemi DVCS è il modo in cui tutti sembrano considerare qualsiasi cambiamento non confermato come una bomba a orologeria.
In Mercurial, se provi a recuperare le modifiche e hai delle modifiche non confermate nella tua copia di lavoro, devi saltare attraverso i cerchi per farlo unire le modifiche in arrivo. Prova a cambiare ramo? Ti costringerà a scartare tutto e poi dovrai immediatamente scartare tutto dall'altra parte. (SVN non ha problemi con nessuno di questi scenari.)
Git è più o meno allo stesso modo. Sto lavorando fianco a fianco con un altro sviluppatore su un progetto e ho appena provato a scegliere uno dei suoi impegni nel mio fork. Si è rifiutato di consentirmi perché ho apportato modifiche non impegnate 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 nascondere le mie modifiche!
Se una persona dovesse trattare qualcosa di completamente innocuo con tale estrema cautela, la definirei una "fobia", una paura irrazionale che dovrebbe essere considerata come un disturbo mentale. Ma Git e Mercurial sono stati progettati da due diversi team 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 cambiamenti non impegnati? E se è così, perché il problema in questione sembra esistere solo sui DVCS?