Eclipse git checkout (又称还原)

146

是否可以使用EGit插件在Eclipse内部执行类似于git checkout的操作?

我有一个已经被修改过的文件,想要放弃这些更改并将文件恢复为源代码库中的状态。在Subversion中,这个操作叫做还原(revert)。 在git中,相当于这个操作的是checkout。

我找不到任何在Team菜单下类似于checkout或revert的选项。我正在使用EGit 0.6.0版本。


7
Git糟糕透了!在还原之前,它不会显示你将要还原的内容。而Subversion会提供一个漂亮的确认窗口,列出你将要还原的文件清单。这样,你可以选择要还原哪些文件,或者当场取消。超强大的Git居然做不到这一点,真丢人。 - JohnPristine
5
Eclipse的git插件(egit)会显示确认窗口,而不是git本身。 - Brad Cupit
右键单击要还原的文件,然后选择“覆盖”。我同意,Git 真烂。 - DhafirNz
在2016年的eGit版本4.5.0中,我没有看到“覆盖”选项。现在似乎改为“替换为...”“HEAD修订版”。 - Ed Randall
9个回答

279

可以通过在包视图中的文件上下文菜单 "Replace with/Git索引中的文件" 来完成此操作。


5
如果文件在工作区不存在(或已经不存在了),会发生什么? - zedoo
如果文件不存在,则打开“Git Staging”视图,在“Unstaged Changes”列表中右键单击已删除的文件,然后选择“Replace with HEAD Revision”。 - Vlasta Dolejs

45
你可以通过进行(强制)重置来实现这一点。在项目的上下文菜单中,选择团队 > 重置为...,选择“HEAD”和“硬重置”作为重置类型。
请注意,这样做将会丢失所有文件的更改。要还原单个文件,请参见此答案

我刚刚通过艰难的方式发现,提交(commit)也会执行相同的操作——提交所有文件而不仅仅是选定的文件。 - Steve Kuo
没错,但至少你可以在提交对话框中取消选择文件... 顺便说一下:我已经为重置提交了一个错误报告 https://bugs.eclipse.org/bugs/show_bug.cgi?id=295423 - simon
5
在 Eclipse 中,Git 的支持相对于 CVS 和 SVN 真的很糟糕!CVS 的“使用最新版本替换 HEAD”功能对我来说非常重要。 - kosoant
@kosoant Eclipse也可以使用Git来实现。请参考这个答案 - Brad Cupit
3
他明确询问如何还原一个文件,而不是所有文件。 - Zofren

18

在 Eclipse 版本:3.7.0 中

在 "团队同步视图" 中 --> 右键单击同步视图中的文件/文件夹 --> 覆盖


这是最容易执行的之一。它会弹出一个窗口来确认您是否要覆盖本地更改。 - Karidrgn
这删除了新文件和未暂存的更改,正是我所需要的。 - Katu

16

通过以下步骤撤销单个文件: 窗口 > 显示视图 > 其他 > Git暂存 > 未暂存的更改

选择要还原的文件。右键单击并选择使用HEAD版本替换

请注意,此步骤无法撤消。

(我正在使用Eclipse版本:3.7.2 Egit版本2.3.1.201302201838-r)


15
另一个可能性是使用Git暂存视图
  • 按Ctrl+3或Command+3打开Git暂存视图并输入“staging”
  • 如果视图没有显示您的代码库,请单击项目或文件。
  • 现在您应该在“未暂存的更改”部分看到您修改的文件。
  • 双击未暂存的文件。
  • 现在您将看到一个比较视图,左侧是您的版本,右侧是更改前的版本。

现在,要撤消文件中的某些更改,请执行以下操作:

  • 在比较视图中选择其中一行已更改的代码
  • 选择“从右到左复制当前更改”的工具栏项。

这将使左侧与此更改的右侧对应。保存文件以完成撤消。

要撤消所有更改:

  • 在暂存视图中,右键单击未暂存的文件。
  • 选择“用Git索引中的文件替换”。

您还可以选择多个未暂存的文件,然后右键单击。


我想知道为什么这个答案得票这么少。我更愿意将其标记为最佳答案;我自己永远不会想到的。谢谢@robinst - HarsH

8

还原:您可以右键单击要还原的文件/目录,然后选择替换为 -> HEAD版本


这适用于Eclipse中的任何Git插件吗?它在Egit上可以正常工作。 - johnnieb
更新:在Eclipse Mars和Luna SR2(内置Git)中,它的工作方式是这样的。 - Mag

4

打开团队同步。找到该文件,右键单击-->覆盖。

更新

在Eclipse Luna(4.4.2)中 打开团队同步。找到该文件,右键单击-->"还原..."


3

实际上,这个功能已经存在,但可能不太明显:

  • 确保使用git修订版本启用了quickdiff,并且quickdiff基线为HEAD(这是默认设置)。
  • 打开要还原的文件。
  • 选择全部内容(Ctrl-A)
  • 在quickdiff栏中右键单击
  • 选择“还原选择”
  • 保存

顺便说一下,在git术语中,“还原”意味着创建一个新的提交来还原早期的提交。


要在quickdiff中工作,这里有一个快速介绍:http://wiki.eclipse.org/EGit/User_Guide/State#Quickdiff - Valentin Despa

3

要将整个文件恢复为存储库的数据:

单击您要进行修订的文件夹,然后转到GitStaging 输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接