I'm not going to lie to you; fugitive.vim may very well be the best Git wrapper of all time. Check out these features:

View any blob, tree, commit, or tag in the repository with :Gedit (and :Gsplit, :Gvsplit, :Gtabedit, ...). Edit a file in the index and write to it to stage the changes. Use :Gdiff to bring up the staged version of the file side by side with the working tree version and use Vim's diff handling capabilities to stage a subset of the file's changes.

Bring up the output of git-status with :Gstatus. Press `-` to add/reset a file's changes, or `p` to add/reset --patch. And guess what :Gcommit does!

:Gblame brings up an interactive vertical split with git-blame output. Press enter on a line to reblame the file as it stood in that commit, or`o` to open that commit in a split.

:Gmove does a git-mv on a file and simultaneously renames the buffer. :Gremove does a git-rm on a file and simultaneously deletes the buffer.

Use :Ggrep to search the work tree (or any arbitrary commit) with git-grep, skipping over that which is not tracked in the repository. :Glog loads all previous revisions of a file into the quickfix list so you can iterate over them and watch the file evolve!

:Gread is a variant of `git checkout -- filename` that operates on the buffer rather than the filename. This means you can use `u` to undo it and you never get any warnings about the file changing outside Vim. :Gwrite writes to both the work tree and index versions of a file, making it like git-add when called from a work tree file and like git-checkout when called from the index or a blob in history.

Add %{fugitive#statusline()} to 'statusline' to get an indicator with the current branch in (surprise!) your statusline.

<C-R><C-G> in :Gstatus recalls cursor line filename.
Map dp to show diff in :Gstatus.
Add ca and cA commit maps to :Gstatus.
Add cc alias for C in :Gstatus.
Disable swapfile in :Gstatus.
Replace :Gstatus cv with cva and cvc.
Add an `S` mapping for vertical splits from :Gstatus.
Close diffs when navigating from :Gstatus.
Enable folding in :Gstatus.
Accept a count with :Gstatus <C-N>/<C-P>.
Allow <C-p> pass through to ctrlp.vim in :Gstatus.
Add . in :Gstatus to prepopulate command line with revision.
Fix :Gstatus dp with external diff enabled.
Force displayCommentPrefix to fix :Gstatus on 1.8.5+.
Support localized `git status`.
Map g? and <F1> to show help in :Gstatus and :Gblame.
Kill relativenumber in blame buffer.
Fix jump to line on reblame.
Return to blamed buffer on q in blame.
Restore blamed window on gq in blame.
Fix :Gblame scrollbind with folds.
Jump from blame to commit focuses relevant diff.
:Gblame: Retain original alternate buffer.
Use - not <CR> for reblame.
Switch :Gblame <CR> to open commit.
Open fold when jumping to commit from blame.
Add maps for resizing blame window.
Conceal file names and line numbers in :Gblame.
Set winfixwidth in :Gblame buffers.
Press <CR> in :Gblame to open commit (reblame is now -).
Better csh support.
Work around "always" color option.
Fix trailing blank line when editing index files.
Use HTTPS for GitHub URLs in README.
:Gdiff split direction based on 'diffopt' and window size.
Focus diff window on :Gdiff.
Restore options when turning off diff mode.
Set bufhidden=delete in historical buffers.
Fix modeline errors in historical buffers.
Change cp to cP.
Add :Git! et al. for loading output into a buffer.
Tab complete Git aliases.
Enter on a +/- diff line jumps to that line.
Better Windows support.
Support core.autocrlf=false on Windows.
Work around slow \\ Windows network path.
Work around .git in 'wildignore'.
Fix garbage during :Gcommit with alternate screen.
Fix garbling on :Gcommit when nothing is staged.
Hack around broken :Gcommit with symlinked .git.
Use y<C-G> to yank the current object's path.
Preserve alternate file in :Gmove.
Support bare repositories that don't end in .git.
Support .git-file repositories (including submodules).
Support symlinked .git if core.worktree is set.
Fix redraw issue after :Gbrowse.
Support GitHub FI in :Gbrowse.
Support implicit GitHub username in remote for :Gbrowse.
Make fugitive commands available in nerdtree buffers.
Make fugitive commands available in command line window.
:Glgrep and :Gllog.
:.Glog jumps to same line in each file.
Map - to go up a directory.
Provide custom 'foldtext'.
Respect $GIT_CEILING_DIRECTORIES.
Look for $GIT_DIR and $GIT_WORK_TREE.
Improve Windows support.
Assorted bug fixes.

Support :Gmove in a directory.
Provide :Gbrowse to open code on GitHub or in git-instaweb.
Provide :Gwq to :quit after :Gwrite.
Provide :Gsdiff to do a horizontal diff.
Map ds in :Gstatus to do a horizontal diff.
Map <C-N> and <C-P> in :Gstatus to cycle between files.
Map `-` on headings in :Gstatus.
Map dp in stage conflict to do the right thing.
Point 'tags' at .git/tags.
Windows fixes. [Michael Geddes]