nnoremap <Leader>ga :Git add %<CR>
nnoremap <Leader>gA :Git reset HEAD %<CR>
xnoremap <Leader>gb :Git blame<CR>
nnoremap <Leader>gb :keepalt Git branch -a<CR>
nnoremap <Leader>gB :keepalt Git branch<SPACE>
nnoremap <Leader>gc :Git checkout -b<SPACE>
nnoremap <Leader>gC :Git checkout<SPACE>
nnoremap <Leader>gd :Git difftool<CR>
nnoremap <Leader>gD :Git difftool -y<CR>
nnoremap <Leader>ge :sp<CR>:Gedit HEAD~:%<Left><Left>
nnoremap <Leader>gE :sp<CR>:Gedit :%:p<Left><Left><Left><Left>
nnoremap <Leader>gf :Git fetch --all --tags -f<CR>
nnoremap <Leader>gF :call git#git_fetch_origin_merge()<CR>
nnoremap <Leader>gg :Git<CR>
nnoremap <Leader>gh :keepalt Git log --grep=
nnoremap <Leader>gH :<C-U>keepalt Git log -G<C-r><C-w>
nnoremap <Leader>gk :call git#git_review()<CR>
nnoremap <Leader>gK :call git#git_review_fileview()<CR>
nnoremap <Leader>gl :keepalt Git log --stat %<CR>
nnoremap <Leader>gL :keepalt Git log --stat -n 100<CR>
xnoremap <Leader>gl :<C-U>call git#git_log_range()<CR>
xnoremap <Leader>gL :call git#git_log_named_block()<CR>
nnoremap <Leader>gm :0,3Git blame<CR><C-w>j<CR>
nnoremap <Leader>gM :call git#git_merge_origin()<CR>
nnoremap <Leader>gn :Git branch -m<SPACE>
nnoremap <Leader>go :call git#git_log_compare()<CR>
nnoremap <Leader>gr :keepalt Ggrep! -q<SPACE>
nnoremap <Leader>gR :call git#git_rebase_origin()<CR>
nnoremap <Leader>g- :call git#git_stash()<CR>:e<CR>
nnoremap <Leader>g+ :Git stash pop stash@
nnoremap <Leader>gs :Git stash list<CR>
nnoremap <Leader>gS :Git stash -- %<CR>
nnoremap <Leader>gt :keepalt Git reflog<CR>
nnoremap <Leader>gw :Gwrite<CR>
nnoremap <Leader>G  :keepalt Git<SPACE>

nnoremap <Leader>gp :call git#git_push_to_upstream()<CR>
nnoremap <expr> <Leader>gP git#git_push()

augroup custom_fugitive
  autocmd!
  autocmd BufReadPost fugitive://* setlocal bufhidden=wipe
  autocmd User FugitiveObject,FugitiveIndex nnoremap <buffer><silent> q :bwipeout!<CR>
  autocmd User FugitiveIndex nmap <buffer> dt :Gtabedit <Plug><cfile><Bar>Gdiffsplit!<Bar>only<CR>
augroup END
