2010-04-22 58 views

回答

72

我相信如果一个文件被修改,但尚未添加(分阶段),它是纯粹的“私人”。
这意味着它无法通过GIT恢复如果与索引或HEAD版本覆盖(除非你有你当前的工作副本的地方)。”

‘私人’的内容是一个仅在当前目录可见,但在Git的任何方式注册

+1

我明白,'私人'文件的更改不能由git撤消。但是,如果文件被git修改了(例如通过'git checkout --'),我希望它能够撤销该操作,也许可以通过'reflog'。那是错误的期望? – 2016-11-27 22:30:34

+1

@CiprianTomoiaga reflog用于过去*未提交*提交。如果你想恢复的内容没有被提交(或分段),reflog不会帮助你。 – VonC 2016-11-27 22:32:18

+1

@CiprianTomoiaga对于任何类型的私人内容(尚未添加),您将完全依赖于您的编辑器或IDE功能。 eclipse示例:http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Ftasks-87b.htm – VonC 2016-11-27 22:33:22

39

很遗憾,您的更改将丢失您的私人修改只是覆盖 除非你做了git stash事先制定结账......

从光明的一面把它:。你可以现在把事情做得更好;)

+0

我只是'checkout - .' OMG,我希望新的工具更好..不要在家编码.. – coanor 2013-01-14 02:11:29

131

如果您使用的是“专业”IDE,那么您可以从本地历史记录中恢复文件。 例如,您可以右键单击文件并查看独立于git更改的更改历史记录,现在为我节省了几次^^

+26

仅供参考此功能适用于整个JetBrains系列“专业”IDE:Pycharm,IDEA,PHPStorm,Webstorm。今天保存了我的bakken。谢谢,克里斯托弗! – 2012-12-03 22:08:47

+6

我得感谢你。我使用WebStorm,并且完全忘记了这个功能,尽管我经常使用它。我只是陷入了代码的丢失,我没有想到它! – 2013-04-05 03:16:52

+7

在eclipse中,您可以右键点击文件 - >与 - >本地历史进行比较 – Maragues 2013-05-31 15:05:06

31

如果您使用的是像Sublime Text这样的编辑器,并且存在有问题的文件仍然打开,你可以按ctrl + z,它会回到git checkout之前的状态。

+0

此答案是我的一天保存的。非常感谢! – feyyaz 2016-11-13 10:36:34

+0

刚才我偶然发现了这个错误,并且即将发布一个新的答案。它看起来像Sublime捕获Git在其文件修改历史中更改文件状态。 – Timmah 2017-06-09 07:07:07

18

检查IDE中的本地历史记录。

+0

只是做了一个错误,没有分期我的变化,并强制结帐。我在Android Studio中查看了本地历史记录(查看 - >最近的更改)并恢复了我所做的最后更改。更多信息在这里https://www.jetbrains.com/help/idea/2016.3/restoring-a-file-from-local-history.html – AimanB 2016-12-21 02:26:21

+0

这对RubyMine非常有效,消除你的更改的操作将被引用作为“外部变化”。非常感谢这个Marcin,它为我节省了一小时的工作时间! – AndrewSouthpaw 2017-01-18 19:17:16

-1

也许你的改变不会丢失。检查“混帐引用日志”

我引用下面的文章:

“基本上每次你的Git存储数据的内部执行的动作,你可以找到它的引用日志里面的Git试图真的很难不丢失。您的资料,因此,如果由于某种原因,你觉得它有,那么你可以使用Git引用日志挖掘出来”

查看详情:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html

+2

不要让你的希望得到提升 - 得到reflog只有在你以有意义的方式与git进行交互时才会有帮助。只需编辑一个文件,然后通过git结账把它吹走? git从来没有机会。 – 2013-09-20 16:09:13

+1

+1我认为值得一提的是'git reflog'在这里,当我寻找撤销一个'git checkout HEAD'的时候,我发现了这个答案 - 我打算输入'git reset HEAD。' - 我刚才做了'git reset --soft HEAD〜1'并且不知道'git reflog',所以能够找回我已经完成的工作:) – 2016-03-28 12:10:54

-1

技术上是的。但只限于某些情况。例如,如果您有代码页,并且您打了git checkout,并且您意识到您意外检出了错误的页面或其他内容。转到该页面并单击撤消。 (对于我来说,命令+ z),并且它会返回到您打开良好的旧git结帐之前的确切位置。

如果您的页面已关闭,那么这将不起作用,然后您打git结帐。它只适用于实际代码页打开的情况

0

这种情况的有效救星是Time Machine(OS X)或类似的基于时间的备份系统。它救了我几次,因为我可以返回并恢复那一个文件。

+0

亲爱的downvoter - 请你解释一下我可以如何改进这个答案? – sscirrus 2016-12-13 05:59:32

10

上开发OS X?使用Xcode?你很可能会很幸运!

comment by qungu中所述,即使您未使用时间机器,OS X也会保留文件的自动保存版本历史记录,

所以,如果你吹走满不在乎git checkout .你不分阶段的局部变化,这里是你如何能可能恢复所有的工作。

如果有人发现这个线程已经破坏了XCode中的一些工作,有一种方法来获取自动保存历史记录。 XCode本身没有菜单条目来查看自动保存历史记录,但它确实存储它。如果在TextEdit中打开有问题的文件,则可以在File> Revert下恢复并查看AutoSave历史记录。

这是真棒,昨天恢复了约一天的工作。


也许你会问,“为什么不git的命令行界面,只是吹他们离开之前,在2016年用于软件工程,至少备份文件最大的VCS?就像,你知道的,大约过去三十年写得很好的软件工具。“

或者你也许会问,“为什么在TextEdit中可以访问这个非常棒的文件历史记录功能,但是实际上我不需要Xcode吗?

......我认为这两者都会告诉你很多关于我们这个行业的信息。或者,也许你会去修复这些工具。这将是真棒。

+1

我可以证实这一点。这只是为我节省了几个小时的工作! – 2018-01-05 15:15:07

+0

超级:-)很高兴知道,布鲁诺,谢谢。 – Benjohn 2018-01-08 14:29:01

+0

没有为我工作,因为有关的文件是'Model'不幸 – brahimm 2018-01-25 16:46:04

0

如果与终端工作/ CMD提示开放,并用于将已经显示出不分阶段改变(diffadd -pcheckout -p等)任何GIT中的命令,并且没有关闭终端/自CMD提示,你会发现如果你滚动到你运行上述git命令的地方,那么未分离的更改仍然可用。