使用git log,我得到了一个到目前为止我所做的提交列表。

commit f5c5cac0033439c17ebf905d4391dc0705dbd5f1
Author: prosseek 
Date:   Fri Sep 3 14:36:59 2010 -0500

    Added and modified the files.

commit c14809fafb08b9e96ff2879999ba8c807d10fb07
Author: prosseek 
Date:   Tue Aug 31 08:59:32 2010 -0500

    Just simple test for core.editor.

... etc ...

如何将其恢复到特定的提交?例如,如果我想返回提交c14809fafb08b9e96ff2879999ba8c807d10fb07,我应该怎么做? 是否有其他/更好的方法可以使用Git返回特定的提交?例如,我是否可以为每个commit添加一些标签以使其与标签一起返回?


当前回答

Git重置c14809fafb08b9e96ff2879999ba8c807d10fb07是你想要的…

其他回答

如果你想强制这个问题,你可以这样做:

git reset --hard c14809fafb08b9e96ff2879999ba8c807d10fb07

将您送回您的git克隆在签入时的样子

Git重置c14809fafb08b9e96ff2879999ba8c807d10fb07是你想要的…

您是希望将回购回滚到该状态,还是希望本地回购看起来像这样?

如果你硬重置,它会让你的本地代码和本地历史记录和提交时一样。但如果你想把这个推给另一个有新历史的人,它会失败:

git reset --hard c14809fa

如果你重置-软,它会移动你的头到他们的地方,但留下你的本地文件等相同:

git reset --soft c14809fa

那么这次重置你到底想做什么?

编辑-

你可以给你的回购加上“标签”。然后回到标签。但是标签实际上只是sha1的快捷方式。

你可以把它标记为TAG1..然后git reset -soft c14809fa, git reset -soft TAG1,或git reset -soft c14809fafb08b9e96ff2879999ba8c807d10fb07都会做同样的事情。

我认为,bwawok的答案在某种程度上是错误的:

如果有的话 Git重置-软c14809fa 它将使您的本地文件更改为当时的样子,但保留您的历史记录等相同。

根据手册:git-reset,“git reset -soft”…

根本不涉及索引文件和工作树(但将头部重置为<commit>,就像所有模式一样)。这将使所有更改过的文件都变成“要提交的更改”,就像git状态所显示的那样。

因此它将从分支中“移除”更新的提交。这意味着,在查看了旧代码之后,您无法再次轻松地转到该分支中的最新提交。所以它做了bwawok所描述的相反的事情:本地文件没有被改变(它们看起来和“git reset——soft”之前完全一样),但是历史被修改(分支在指定的提交之后被截断)。

bwawok回答的命令可能是:

git checkout <commit>

您可以使用它来查看旧版本:我的代码昨天看起来怎么样?

(我知道,我应该把这个放在这个答案的评论中,但stackoverflow不允许我这样做!我的名声太低了。