What makes Git difficult for someone coming from Mercurial

I'm used to consistent terminology. I'm used to a particular concept being referred to in the same way throughout. But in Git, the same set of very closely related concepts can be referred to by lots of very different names. Let me show you the worst example I've come across yet.

In Git, one can stage changes to be committed. These changes are kept in an index (aka cache). Staging is done by running a command called git add, and such files are called checked in to index. Un-staging is done by calling git reset. To diff changes in the index, one runs "diff" with the --cached option.

Here's an idea: pick a term and stick with it! Call "index" a stage. Call the command "git stage". Call the diff option "--staged" (this one even exists already, as a synonym). Add a "git unstage" command, even if the same can already be done via "git reset" (and probably three other ways). Most of all, pick on everyone who continues using the old terms when talking of Git, because they keep spreading the inconsistency and making people like me rather dislike the experience of learning Git. Learning Mercurial was a lot more pleasant, because it's consistent.

Tags: