Git:恢复到之前的提交状态

时间:2011-02-15 13:29:07

标签: git commit reset

我很困惑。我想回到我之前在“git log”中确定的提交。

但是当我做“git checkout”时,我没有得到提交。没有什么变化。 它告诉我我处于分离的HEAD模式,但我想要的文件不存在。

我做错了什么?

MRB

2 个答案:

答案 0 :(得分:20)

git reset --hard <commit>从联系人页面:

  

将工作树和索引与正在切换到的树的索引相匹配。对工作树中跟踪文件的任何更改都将丢失。

git checkout用于将您的工作目录切换到其他分支或提交。这不会移动HEAD

答案 1 :(得分:8)

不要git reset -hard它是PERMANENT!

请使用

git stash -u 

,而不是!如果你有一件工作在那里偶然发生,你仍然可以把它拿回来。这永远不会被推到你的遥控器上,除非你选择通过制作一个分支并推动它来实现这一目标。

此外,您正走在正确的轨道上,您可以使用git checkout来完成同样的事情。语法是

git checkout HEAD -- . 

但它与git reset --hard有同样的问题。坚持藏匿,你将来会失去你的头发。

更长的答案

上述解决方案可以恢复所有更改。但是,你问过如何摆脱一些变化。为了完整起见,我会加上这个。

要做到这一点,你可以

git add file1 file2 file3
git stash save --patch

现在,系统会提示您确切要求消失的内容......直到任何级别的粒度。因此,如果您选择这样做,您可以安全地“拒绝”对单个文件进行一些更改。