why need commit