git clone https://github.com/username/project.git
     
 
     git reset --soft HEAD^
     
 
     git reset --hard HEAD^
     
 
     mkdir -p ~/git_repository/sample/project_1
     cd ~/git_repository/sample/project_1
     #
     # --bare is for remote repository. If no --bare, I got the
     # following error when push
     #    refusing to update checked out branch: refs/heads/master
     #
     git init --bare
       
     
     mkdir -p ~/work/project_1
     cd ~/work/
     git clone ssh://username@localhost/home/username/git_repository/sample/project_1
     # Now you have your local git work project
     # Add and push/pull
         
     
     A--B--C--D    <- origin/master (on remote)
     ============================================================
     A--B--C       <- (fetched) (local)
     ============================================================
     A--B--C
            \---E---F  <- master (local)
             
         
     A--B--C--D
     ============= fetch syncs remote to fetch
     A--B--C--D
     ============================================================
     A--B--C
            \---E---F  <- master (local)
             
         
     A--B--C--D     <-- origin/master
     =============
     A--B--C--D
     ============= rebase syncs fetched to master (local) and recommit local
     A--B--C--D
               \---E---F  <- master (local)
             
         
     A--B--C--D--E---F  <- master (local)
              ^
              |
             head
         
         git checkout master moves the head
             to the master (branch)
     A--B--C--D--E---F  <- master (local)
                     ^
                     |
                   head
         
     
     git rebase.
                 
     A--B--C--D--E--F--G--H     <- fetched
     ======================
     A--B--C--D--E--F  <- master (local)
                    ^
                    |
                  head
                 
             git rebase resolves the difference
                 between fetched and master.
                 
     A--B--C--D--E--F--G--H     <- fetched
     ======================
     A--B--C--D--E--F--G--H  <- master (local)
                          ^
                          |
                        head
                 
             
     % git svn clone svn+ssh://svn.repository/svnroot/project/trunk/src
     
     or only a part of it
     
     #-- excluding excluding_dir from svn control
     % svn chechout svn+ssh://svn.repository/svnroot/project/trunk/src
     % cd src
     % svn update --set-depth exclude excluding_dir
     #-- partial git svn control
     % git svn clone svn+ssh://svn.repository/svnroot/project/trunk/src/excluding_dir
     
 
     % git svn rebase
     
 
     % git svn commit
     
     if some conflict or need to rebase, but not clean.
     
     # -- push local change to stash
     % git stash
     # -- pull and update local
     % git svn rebase
     # -- merge pushed local change on stash
     % git stash pop
     % git svn commit
     
 
     % git svn dcommit
     
 
     % git rebase -i HEAD~10
     # -- Then an editor will popup.
     #    Replace keyword to squash where you want to squash and save.
     
     Note: 'git svn rebase' and 'git rebase' are totally different.
 
     % git show REV:filename
     % # Ex. see revison HEAD -10's foo.cpp file.
     % git show HEAD~10:foo.cpp
     
 
     (autoload 'magit-status "/magit/path//magit" nil t)
     
     
      % git config diff.tool xxdiff
      % git difftool
      
      
      % git config difftool.prompt false