From a technical point of view, staging also supports transactional commits, by splitting all operations into what can fail (staging) and what cannot fail (commit): The commit in git is implemented transactionally, after the staging is sucessfull.