使用Git恢复基于commit id的特定提交?
使用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的具体提交? 例如,我可以把每个提交的标签拿回标签吗?
你想把你的回购回滚到那个状态吗? 或者你只是想让你的本地回购看起来像那样?
如果你这样做
git reset --hard c14809fa
这将使你的本地代码和本地历史就像在这个提交。 但是如果你想把这件事推给有新历史的人,那就会失败。
如果你这样做
git reset --soft c14809fa
它会使你的本地文件变得像他们那样,但离开你的历史等等。
那么你想要做什么这个重置?
编辑 –
您可以添加“标签”到您的回购..然后回到标签。 但是标签实际上只是sha1的一个捷径。
你可以把这个标记为TAG1 ..然后git reset --soft c14809fa
, git reset --soft TAG1
,或者git reset --soft c14809fafb08b9e96ff2879999ba8c807d10fb07
都会做同样的事情。
我认为,bwawok的答案在某种程度上是错误的:
如果你这样做
git reset --soft c14809fa
它会使你的本地文件变得像他们那样,但离开你的历史等等。
根据手册:git-reset ,“git reset –soft”…
不会碰到索引文件,也不会碰到工作树(但像所有模式一样,将头重置为<commit>)。 这将保留所有更改的文件“更改为提交”,因为git状态会将其放入。
所以它会从分支中“删除”更新的提交。 这意味着,在查看旧代码之后,您不能再轻易地再次访问此分支中的最新提交。 所以它和bwawok描述的相反:本地文件没有改变(它们看起来和之前的“git reset –soft”一模一样),但是历史被修改了(在指定的提交之后,分支被截断了)。
bwawok的答案可能是:
git checkout <commit>
你可以用它来窥探旧版本:我的代码昨天是怎么看的?
(我知道,我应该把这个注释给这个答案,但是stackoverflow不允许我这样做!我的声望太低了。)
git reset c14809fafb08b9e96ff2879999ba8c807d10fb07
是你之后…
如果你想强制这个问题,你可以这样做:
git reset --hard c14809fafb08b9e96ff2879999ba8c807d10fb07
回到你的git克隆在签入时的样子