Vindo de um plano de fundo do SVN, uma das coisas mais difíceis de se acostumar ao trabalhar com sistemas DVCS é a maneira como todos parecem considerar qualquer mudança não confirmada como uma bomba-relógio.
No Mercurial, se você tentar buscar alterações e tiver alguma alteração não confirmada em sua cópia de trabalho, precisará passar por bastidores para conseguir que apenas as alterações recebidas sejam mescladas. Tente alternar ramificações? Isso forçará você a arquivar tudo e, em seguida, você deverá desmontar tudo do outro lado. (O SVN não tem problemas com nenhum desses cenários.)
Git é da mesma maneira. Estou trabalhando lado a lado com outro desenvolvedor em um projeto e apenas tentei escolher um de seus commits no meu fork. Ele se recusou a me deixar porque eu tinha alterações não confirmadas em minha cópia de trabalho, em arquivos completamente diferentes dos que foram alterados em seu commit. Não há nem uma opção de mesclagem; aparentemente eu tenho que esconder minhas alterações primeiro!
Se uma pessoa tratasse algo completamente inofensivo com tanta cautela, eu chamaria isso de "fobia", um medo irracional que deveria ser considerado um distúrbio mental. Mas Git e Mercurial foram projetados por duas equipes diferentes de desenvolvedores inteligentes e racionais, então eu tenho que me perguntar se eles sabem de algo que eu não conheço.
Existe uma razão técnica que justifique essa atitude em relação a mudanças não confirmadas? E se sim, por que o problema em questão parece existir apenas nos DVCSes?