In a nuthsell:
-the history in git is made of immutable commit objects organized in a
DAG that is built incrementally, with a full snapshot of the source
tree attached to each commit.
-git fetch replicates commits from a remote instance into your local
one, but doesn't modify your local state.
-git merge creates a commit that combines the ancestry of multiple
commits (the first one bring your current HEAD). A fast forward is
when one of those commits is already a descendant of the other(s) and
can be used as the result of the merge.
-git cherry-pick essentially diffs a commit against its parent, and
patches it on top of another.
-grossly oversimplifying, git rebase is an automated sequence of cherry-picks.
-git pull combines git fetch and git merge: replicate commits from a
remote instance and combine them with your current HEAD.
-repo download combines git fetch and git checkout: replicate commits
from a remote instance and switch your HEAD and local state to the
commit that just got fetched.
Hope that helps a bit.
JBQ
On Wed, Nov 25, 2009 at 8:53 AM, Masood Mortazavi