If you think the mess (i.e. 50 mixed up mini commits as you work on a feature and iterate on it) is useful history (it usually isn't) then use a different DVCS because git was not designed around this mode of operation and a lot of its advanced features work poorly when applied to such a history.
Alternative DVCSes which support this workflow include: fossil
Alternative DVCSes which support this workflow include: fossil