如何从逃犯状态窗口中放弃文件更改?


33

在使用进行访问的逃犯插件 状态窗口中,可以使用:Gstatus来区分文件的更改,D并使用来切换文件的提交-

是否有任何类似的快捷方式来放弃更改,我的意思是等同于git checkout -- filename

更新:

在逃犯github页面上找到功能请求问题#97:签出/删除文件的快捷方式

据认为,首选方法是使用 :Gread :w

更新2:

自2014年6月以来,可以使用下面UAnson 回答。

更新3:2019年1月3日以来,绑定已映射到X

Answers:


27

该功能于2014年6月添加,默认情况下映射到U

此信息位于帮助文件中的:h :Gstatus

     U     |:Git| checkout HEAD

功能请求和讨论:https :
//github.com/tpope/vim-fugitive/issues/97

提交:https :
//github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63


如果没有记录,则可能被认为是不安全的。难道发现您因未记载的魔术按键而破坏了本地更改吗?
sehe 2015年

2
2019现在更新X
Oguz Bilgic

拥有编辑权限的人,请将其编辑为X吗?
chriz

15

您可以使用逃犯Gread命令将缓冲区的内容替换为缓冲区文件的各种备用版本(即,必须从文件缓冲区而不是:Gstatus缓冲区执行此操作)。

  • :Gread(不带参数)将使用索引中的文件版本。
  • :Gread - 将使用HEAD提交中的文件版本。

请阅读文档:help fugitive-revision的其他版本规格列表逃犯支持(以上两个可能是最直接有用的)。

:Gread工作流进行这样的:

  1. :Gread
  2. 逃犯清除当前缓冲区并从索引中读取内容
  3. 结果:缓冲区现在具有与索引相同的内容。工作树文件未更改。
  4. 您可以继续:w将文件保存到工作树中(或:Gread|w在知道立即保存时使用)。

:Git checkout -- %工作流进行这样的:

  1. :Git checkout -- %
  2. Git将索引中文件的版本复制到工作树中的文件。
  3. Vim注意到文件已在编辑器外部更改,并提示您忽略或重新加载它。
  4. 您告诉Vim重新加载文件。
  5. 结果:现在,工作树文件和缓冲区都具有索引中的内容。

摘要::Gread避免出现“自编辑开始以来文件已更改”的提示,并让您决定何时要在工作树中修改文件。


当缓冲区表示文件的索引阶段而不是工作树中的文件时,请:Gread从文件的内容中读取文件的内容,因为它存在于工作树中的磁盘上,而不是索引的阶段0中。


映射gstatus以还原文件:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor 2014年

1

映射gstatus以还原文件:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>

这很有效,唯一的缺点是,我会得到一个对话框,提示文件已在磁盘上更改,并且如果我想重新加载它。如果保持沉默,那就太好了。
tidbeck 2014年

1
当您确认该文件实际上已还原时,这甚至是更好的IMO。但是,可以使用“自动读取”选项(:help autoread)完成自动静音重新加载。除此之外,您可以bufdo e在上方au
majkinetor 2014年

0

好吧,你尝试了:help fugitive吗?

显然没有,该Git功能没有捷径。


是的,我做到了。有时候,我在帮助中始终没有找到一个功能。您是否认为您永远不应询问程序/插件帮助中没有的功能?
tidbeck

是的,它也发生在我身上:有一个我可以:call但没有关联命令的功能。我不记得插件的名称了……对齐吗?不管怎样,我的观点是,在问周围之前,应该先阅读文档。你做了。太酷了。但是在阅读了文档之后,逻辑上的第二步是由IMO来检查插件的来源,并查看那里是否有一些有用的功能。你应该怎么做。但是,AFAIK完全不处理逃犯git checkout,因此您的机会很小。您可能需要退回到:!git checkout -- filename
romainl 2012年

好的,谢谢您的澄清。我认为您对看一下源代码提出了一个正确的观点,但同时,如果仅源代码中提供了信息,那么此处可能是有效的质量检查。将接受您的答案并继续使用:Git checkout -- %
tidbeck 2012年

0

尽管与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

快速完成工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.