Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

When in the fugitive-plugin status window, accessed using :Gstatus, it's possible to diff changes for a file using D and toggle files for commit using -.

Is there any similar shortcut for discarding changes, with the discard I mean the equivalent of git checkout -- filename?


Found a feature request on fugitives github page Issue #97: Shortcut to checkout/remove files

According to the the preferred way is using :Gread :w

Update 2:

Since June 2014 it's possible using U as answered by Anson.

share|improve this question
up vote 11 down vote accepted

This functionality was added in June 2014 and is by default mapped to U.

This piece of information is located in the help file under :h :Gstatus:

     U     |:Git| checkout HEAD

Feature request and discussion:


share|improve this answer
If that's undocumented it could be construed unsafe. Wouldn't it be tough to find out you clobbered your local changes because of an undocumented magic keystroke? – sehe Feb 7 '15 at 23:50

You can use fugitive’s Gread command to replace the contents of a buffer with various alternate versions of the buffer’s file (i.e. this must be done from a file’s buffer, not from the :Gstatus buffer).

  • :Gread (with no argument) will use the version of the file from the index.
  • :Gread - will use the version of the file from the HEAD commit.

See the documentation at :help fugitive-revision for the list of other revision specifications that fugitive supports (the two above are probably the most immediately useful ones).

The :Gread workflow proceeds like this:

  1. :Gread
  2. fugitive clears the current buffer and reads in the contents from the index
  3. Result: The buffer now has the same contents as the index. The working tree file is not changed.
  4. You can follow up with :w to save the file to the working tree (or use :Gread|w if you know that you will want to save it right away).

The :Git checkout -- % workflow proceeds like this:

  1. :Git checkout -- %
  2. Git copies the version of the file in the index to the file in the working tree.
  3. Vim notices that the file has been changed outside the editor and prompts you to ignore or reload it.
  4. You tell Vim to reload the file.
  5. Result: Both the working tree file and the buffer now have the contents from the index.

Summary: :Gread avoids the “file has changed since editing started” prompt and lets you decide when you want to modify the file in working tree.

When the buffer represents an index stage of the file instead of the file from the working tree, :Gread reads from the contents of the file as it exists on disk in the working tree instead of stage 0 of the index.

share|improve this answer
Mapping for gstatus to revert file : au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr> – majkinetor Mar 31 '14 at 11:16

Mapping for gstatus to revert file:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
share|improve this answer
this works great, only downside is that I will get the dialog that the file has changed on disk and if I want to reload it. Would be nice if it was silent. – tidbeck Apr 1 '14 at 9:09
That is even better IMO as you get confirmation that the file is actually reverted. But automatic silent reload can be done with 'autoread' option (:help autoread). Other then that you could bufdo e within above au. – majkinetor Apr 1 '14 at 11:27

Well, did you try :help fugitive?

Apparently no, there's no shortcut for this Git feature.

share|improve this answer
Yes I did. There have been times I have not found a feature in the help that have been present never the less. Is your opinion that you should never ask about a feature that is not in the help for the program/plugin? – tidbeck Feb 20 '12 at 16:23
Yes it happened to me as well: there was a function that I was able to :call but didn't have a command associated. I don't remember the name of the plugin… Align? whatever, my opinion is that one should read the docs before asking around. Which you did. So that's cool. But the logical second step, after reading the docs, would be IMO to look at the source of the plugin and see if there's some useful function there. Which you should do. But, AFAIK, fugitive doesn't deal with git checkout at all so your chances are slim. You'll probably need to fall back to :!git checkout -- filename. – romainl Feb 20 '12 at 18:23
Ok, thank you for the clarification. I think you make a valid point regarding taking a look at the source code but at the same time if the information only is available in the source code it could be a valid QA here. Will accept your answer and continue using :Git checkout -- %. – tidbeck Feb 20 '12 at 19:23

Though it's got nothing to do with vim, thought of telling you that I sometimes do:

$ git status
#   modified:   .rvmrc
#   modified:   app/views/admin/base/index.html.erb
#   modified:   config/routes.rb

$ # mouse-copy the files i want to reset, and paste them into the next command

$ cat | xargs git checkout

finishing the job quickly.

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .