使用Git恢复基于commit id的特定提交?
这个问题在这里已经有了答案:
你想把你的回购回滚到那个状态吗? 或者你只是想让你的本地回购看起来像那样?
如果你这样做
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
是你之后...
上一篇: Reverting to a specific commit based on commit id with Git?