2011-02-15 110 views
20

我很困惑。我想回到之前在“git log”中确定的提交。Git:恢复到以前的提交状态

但是当我做“git checkout”时,我没有说commit。没有什么变化。 它告诉我我处于分离HEAD模式,但我想要的文件不在那里。

我做错了什么?

MRB

回答

18

git reset --hard <commit>从手册页:

匹配工作树和索引,以该树被切换到。在工作树中跟踪文件的任何更改都会丢失。

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

+0

此外,`reset`用于将您的索引和工作目录重置为以前的状态。 `checkout`用于检出新的或不同的分支。一旦你习惯了它,它并没有那么混乱。 =) – 2011-02-15 13:38:46

+1

请查阅http://www.gitready.com/和http://learn.github.com/p/intro.html以获取最新教程,然后访问http://gitref.org以获取参考信息,准备好了。 – 2011-02-15 13:40:48

9

不要混帐重置 - 它是永久的!

请使用

git stash -u 

,而不是!如果你在那里有一块工作不慎发生,你仍然可以恢复。除非您选择这样做,否则将永远不会推送到您的遥控器,方法是将其从分支中取出并推出。您也可以使用git checkout来完成同样的事情。语法是

git checkout HEAD -- . 

但它有和git reset --hard一样的问题。坚持藏匿,你将会挽救未来失去你的头发。

再回应

上述解决方案恢复所有的更改。但是,你问如何摆脱一些变化。我会补充完整性。

要做到这一点,你可以

git add file1 file2 file3 
git stash save --patch 

现在将提示正是你想要做什么dissappear ...下来什么都粒度级别的。因此,如果您选择这样做,您可以安全地“拒绝”对单个文件的少量更改。