当在逃犯插件 状态窗口,使用 访问:Git
,可以使用 对文件进行差异更改D,并使用 切换文件以进行提交-。
是否有类似的快捷方式来放弃更改,其中放弃的意思是相当于git checkout -- filename
?
更新:
发现了有关逃犯的功能请求github页问题 #97:检出/删除文件的快捷方式
据此首选方式是使用:Gread
:w
更新 2:
更新 3: 自从2019 年 1 月 3 日键绑定映射到X
答案1
截至 2019 年:
此功能已映射到X。以下是:h fugitive-staging-maps
有关它的内容:
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.
历史背景:
此功能于 2014 年 6 月添加,默认映射到U。
功能请求和讨论:
https://github.com/tpope/vim-fugitive/issues/97
犯罪:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63
答案2
您可以使用逃犯命令Gread
用缓冲区文件的各种替代版本替换缓冲区的内容(即,这必须从文件的缓冲区完成,而不是从缓冲区完成:Gstatus
)。
:Gread
(没有参数)将使用索引†中的文件版本。:Gread -
将使用来自 HEAD 提交的文件版本。
请参阅文档:help fugitive-revision
以获取其他修订规范的列表逃犯支持(上面两个可能是最直接有用的)。
工作:Gread
流程如下:
:Gread
- 逃犯清除当前缓冲区并从索引中读取内容
- 结果:缓冲区现在具有与索引相同的内容。工作树文件未发生改变。
- 您可以继续
:w
将文件保存到工作树(或者:Gread|w
如果您知道您需要立即保存它,则使用)。
工作:Git checkout -- %
流程如下:
:Git checkout -- %
- Git 将索引中文件的版本复制到工作树中的文件中。
- Vim 注意到文件已在编辑器外部被更改,并提示您忽略或重新加载。
- 你告诉 Vim 重新加载该文件。
- 结果:工作树文件和缓冲区现在都具有来自索引的内容。
摘要::Gread
避免出现“自编辑开始以来文件已更改”提示,并让您决定何时要在工作树中修改文件。
†当缓冲区代表文件的索引阶段而不是工作树中的文件时,:Gread
从工作树中磁盘上存在的文件内容读取,而不是索引的第 0 阶段。
答案3
gstatus 到恢复文件的映射:
au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
答案4
尽管这与 vim 无关,但我还是想告诉你我有时会这样做:
$ 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
app/views/admin/base/index.html.erb
config/routes.rb
^D
很快的完成工作。