Reverting to a specific commit based on commit id with Git?
有了
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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返回特定的提交?例如,我可以为每个提交添加一些标签,以使其与标签一起返回吗?
你想把回购回那个状态吗?或者你只是想让你的本地回购看起来像那样?
如果你这样做了
1 | git reset --hard c14809fa |
它将使您的本地代码和本地历史就像提交时一样。但是如果你想把这个推给其他有着新历史的人,它就会失败。
如果你这样做了
1 | git reset --soft c14809fa |
它将使您的本地文件更改为原来的样子,但将您的历史记录等保持不变。
那么你到底想用这个重置做什么呢?
编辑-
您可以在回购协议中添加"标签"。然后回到标签上。但标签实际上只是通往sha1的捷径。
您可以将此标记为tag1..那么,一个
我认为,BWawok的回答在某些方面是错误的:
if you do
1 git reset --soft c14809faIt will make your local files changed to be like they were then, but leave your history etc. the same.
根据手册:git reset,"git reset--soft"…
does not touch the index file nor the working tree at all (but resets the head to
, just like all modes do). This leaves all your changed files"Changes to be committed", as git status would put it.
因此,它将从分支中"删除"较新的提交。这意味着,在查看了旧代码之后,您不能再轻松地转到这个分支中最新的提交。所以它做了与bwawok所描述的相反的事情:本地文件没有被更改(它们看起来和"git reset--soft"之前完全一样),但是历史被修改(分支在指定的提交之后被截断)。
bwawok答案的命令可能是:
1 | git checkout <commit> |
你可以用这个来看看旧版本:我的代码昨天看起来怎么样?
(我知道,我应该把这句话写在对这个答案的评论中,但是stackoverflow不允许我这样做!我的名声太低了。)
你所追求的是…
如果要强制解决此问题,可以执行以下操作:
1 | git reset --hard c14809fafb08b9e96ff2879999ba8c807d10fb07 |
让你回到签入时你的Git克隆的样子