Viniendo de un fondo SVN, una de las cosas más difíciles de acostumbrar cuando se trabaja con sistemas DVCS es la forma en que todos parecen considerar cualquier cambio no comprometido como una bomba de tiempo.
En Mercurial, si intenta obtener cambios y tiene cambios no confirmados en su copia de trabajo, debe saltar a través de los aros para que solo combine los cambios entrantes. ¿Intenta cambiar de rama? Te obligará a archivar todo y luego tendrás que deshacerlo inmediatamente en el otro extremo. (SVN no tiene problemas con ninguno de estos escenarios).
Git es casi de la misma manera. Estoy trabajando lado a lado con otro desarrollador en un proyecto, y solo intenté elegir uno de sus compromisos en mi tenedor. Se negó a permitirme porque he realizado cambios no confirmados en mi copia de trabajo, en archivos completamente diferentes a los que cambió en su confirmación. Ni siquiera hay una opción de fusión; aparentemente tengo que esconder mis cambios primero!
Si una persona tratara algo completamente inofensivo con tanta precaución, lo llamaría una "fobia", un miedo irracional que debería considerarse como un trastorno mental. Pero Git y Mercurial fueron diseñados por dos equipos diferentes de desarrolladores inteligentes y racionales, por lo que me pregunto si saben algo de lo que no estoy al tanto.
¿Existe alguna razón técnica que justifique esta actitud hacia cambios no comprometidos? Y si es así, ¿por qué el problema en cuestión solo parece existir en DVCSes?