-nnoremap <silent> <leader>gs :Gstatus<CR>
-nnoremap <silent> <leader>gd :Gdiff<CR>
-nnoremap <silent> <leader>gc :Gcommit -v<CR>
+function! GitToggle()
+ let l:status_buffer = bufname('^fugitive:///*/.git{/worktrees/*,}//$')
+ if buflisted(l:status_buffer)
+ execute 'bdelete '.l:status_buffer
+ else
+ Git
+ 16wincmd_
+ endif
+endfunction
+command! GitToggle :call GitToggle()
+command! GToggle GitToggle
+nnoremap <silent> <leader>gs :GitToggle<CR>
+
+nnoremap <silent> <leader>gd :Gdiffsplit<CR>
+nnoremap <silent> <leader>gc :echohl WarningMsg \| echo "use \<leader>gcc instead" \| echohl None<CR>
+nnoremap <silent> <leader>gcc :tab G commit -v<CR>
+nnoremap <silent> <leader>gca :tab G commit -v --amend<CR>
+nnoremap <leader>gcf :tab G commit -v --fixup=
+nnoremap <silent> <leader>gp :echohl WarningMsg \| echo "use \<leader>gpp instead" \| echohl None<CR>
+nnoremap <silent> <leader>gpp :Git push \| copen<CR>
+nnoremap <silent> <leader>gpf :Git push --force-with-lease \| copen<CR>
+nnoremap <silent> <leader>gll :Git pull<CR>
+nnoremap <silent> <leader>gru :Git rebase --interactive @{upstream}<CR>
+nnoremap <silent> <leader>grp :Git rebase --interactive @{push}<CR>