Here is a good way to think about Git:
* Subversion (or Perforce) stores changes but make you think about files.
* Conceptually, it's a tree of files.
* Git stores files but makes you think about changes.
* Conceptually, it's a tree of deltas (like UNIX patch-files).When you rebase, you are re-applying (or even re-ordering) the deltas elsewhere in the tree. A "merge-commit" resolves 2 lines of deltas into a bi-directional delta.
