Я фиксирую изменения каждый раз, когда подхожу к какому-то логическому завершению этапа. То есть, когда вот я что-то добавил/изменил, и оно, похоже, работает так, как я хочу - делаю коммит. Бэкап в редакторе есть, но он вот именно что отдельно по каждому файлу. Я же не помню, что когда было в каком файле, если редактируешь их с десяток одновременно. А changeset - это набор файлов, которые между собой согласованы.
Не знаю, как у других ;) а у меня бывает следующая неприятная ситуация: вот я делаю что-то, делаю (обычно - правлю код какой-то либы, которая используется в разных местах), а потом в какой-то момент замечаю, что где-то что-то стало работать не так. (в каком-то другом месте, где эта либа используется) Вроде бы, и не трогал там ничего, а вот что-то произошло. Нечасто, но бывает. Тогда я откатываюсь (или по одному changeset-у, или сразу несколько), и смотрю, в какой же момент поведение изменилось. И чем меньше изменений в каждом наборе изменений, тем проще локализовать ошибку.
Недавно дык вообще получилось так, что ошибка была сделана несколько дней назад. Когда обнаружил - быстренько локализовал и исправил. Удобно, блин.