使用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 ...
如何将其还原为特定提交?例如,如果我想返回commit c14809fafb08b9e96ff2879999ba8c807d10fb07
?
有没有其他/更好的方法回到Git的特定提交?例如,我可以将每个提交的一些标签放回标签吗?
答案 0 :(得分:414)
您想将您的回购卷回滚到该状态吗?或者你只是希望你的本地回购看起来像那样?
如果你这样做
git reset --hard c14809fa
它将使您的本地代码和本地历史记录与该提交时一样。但是如果你想把它推给拥有新历史的其他人,它就会失败。
如果你这样做
git reset --soft c14809fa
它会使您的本地文件更改为当时的文件,但保留您的历史记录等。
那么你想用这个重置做什么呢?
编辑 -
您可以在回购邮件中添加“标签”,然后返回标签。但标签实际上只是sha1的快捷方式。
您可以将其标记为TAG1 ..然后git reset --soft c14809fa
,git reset --soft TAG1
或git reset --soft c14809fafb08b9e96ff2879999ba8c807d10fb07
都会做同样的事情。
答案 1 :(得分:154)
我认为,bwawok的答案在某些方面是错误的:
如果你这样做
git reset --soft c14809fa
它会使您的本地文件更改为当时的文件,但保留您的历史记录等。
根据manual: git-reset,“git reset --soft”......
根本不会触及索引文件或工作树(但是将头重置为< commit>,就像所有模式一样)。这将保留所有已更改的文件“要提交的更改”,因为git status会将其设置为。
因此它将从分支中“删除”更新的提交。这意味着,在查看旧代码之后,您无法再轻松地再次访问此分支中的最新提交。所以它与bwawok所描述的相反:本地文件没有改变(它们看起来与“git reset --soft”之前完全相同),但历史被修改(分支在指定的提交之后被截断)。
bwawok答案的命令可能是:
git checkout <commit>
您可以使用它来查看旧版本:我的代码昨天看起来如何?
(我知道,我应该在评论中加入这个答案,但stackoverflow不允许我这样做!我的声誉太低了。)
答案 2 :(得分:22)
git reset c14809fafb08b9e96ff2879999ba8c807d10fb07
就是你所追求的......
答案 3 :(得分:4)
如果您想强制解决问题,可以执行以下操作:
git reset --hard c14809fafb08b9e96ff2879999ba8c807d10fb07
将您回复到签入时git克隆的样子