How can I discard file change from fugitives status window?
As of 2019:
This functionality is mapped to X. Here's what :h fugitive-staging-maps
says about it:
X Discard the change under the cursor. This uses
`checkout` or `clean` under the hood. A command is
echoed that shows how to undo the change. Consult
`:messages` to see it again. You can use this during
a merge conflict do discard "our" changes (--theirs)
in the "Unstaged" section or discard "their" changes
(--ours) in the "Staged" section.
For historical context:
This functionality was added in June 2014 and was by default mapped to U.
Feature request and discussion:
https://github.com/tpope/vim-fugitive/issues/97
Commit:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63
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:
:Gread
- fugitive clears the current buffer and reads in the contents from the index
- Result: The buffer now has the same contents as the index. The working tree file is not changed.
- 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:
:Git checkout -- %
- Git copies the version of the file in the index to the file in the working tree.
- Vim notices that the file has been changed outside the editor and prompts you to ignore or reload it.
- You tell Vim to reload the file.
- 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.