diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim
index 0f35c853f8784f6b3b65e717845e0a4efe22e2ad..6937dc170b88b97982836db88cec70bf6fefd737 100644
--- a/plugin/fugitive.vim
+++ b/plugin/fugitive.vim
@@ -574,7 +574,7 @@ function! s:StageDiff(...) abort
     return 'Git diff --cached'
   elseif filename ==# ''
     return 'Git diff'
-  elseif line =~# '^#\trenamed:' && filename =~ ' -> '
+  elseif line =~# '^#\t\%(renamed\|copied\):' && filename =~ ' -> '
     let [old, new] = split(filename,' -> ')
     execute 'Gedit '.s:fnameescape(':0:'.new)
     return cmd.' HEAD:'.s:fnameescape(old)
@@ -632,7 +632,7 @@ function! s:StageToggle(lnum1,lnum2) abort
         let cmd = ['mv','--'] + reverse(split(filename,' -> '))
         let filename = cmd[-1]
       elseif section =~? ' to be '
-        let cmd = ['reset','-q','--',filename]
+        let cmd = ['reset','-q','--',split(filename,' -> ')[-1]]
       elseif line =~# '^#\tdeleted:'
         let cmd = ['rm','--',filename]
       else