zsh via its ultra-tunable completions can do only 1st part of op's request i.e command option completion, but not the second part i think...
for example, i do the following:
anupam@virat ~ % autoload -Uz compinit
anupam@virat ~ % compinit
anupam@virat ~ % git a<TAB>
add -- add file contents to index
am -- apply patches from a mailbox
apply -- apply patch to files and/or to index
archimport -- import an Arch repository into git
archive -- create archive of files from named tree
My zsh autocompletion list for git add actually contains the stageable files. I don't know if this is stock zsh behaviour or related to my prezto https://github.com/sorin-ionescu/prezto config but it can be done