2

在 github 上,我们在提交 57d7cb274622f86e586c2595317264f23626e6c5 我想恢复提交 5798ee7c56efd7e898d3115da6efe3d5e7cddb6c,这是在最新提交之前的几个提交。这是我正在做的事情:

$ git fetch origin
$ git reset --hard origin/master
Head is now at  57d7cb274
$ git status
nothing to commit (working directory clean)
$git revert 5798ee7c56efd7e898d3115da6efe3d5e7cddb6c
#On branch master
nothing to commit (working directory clean)
$ git status
#On branch master
nothing to commit (working directory clean)

但是生成的代码并不是真正的提交 5798ee7c56efd7e898d3115da6efe3d5e7cddb6c 我错过了什么?

4

2 回答 2

3

你正在混淆git revertgit reset

随着git reset你真的扔掉所有这些提交,你的结果正是给定的提交。

git revert实际上会添加另一个与原始提交完全相反的提交,因此会恢复该提交。

使用git reset对于您的本地存储库来说很好,但是一旦您推送了您的提交,其他人可能已经开始使用这些提交来完成他们自己的工作。因此,在这种情况下,您需要显式还原提交。

请注意,如果您想采用还原方式,则需要还原每个不需要的提交。

于 2013-11-06T03:13:01.687 回答
2

根据https://www.kernel.org/pub/software/scm/git/docs/git-revert.html上的 git 文档, git revert 创建了反转指定提交的提交。

因此,git status运行 git revert 后没有什么可提交的原因是您正在寻找的更改已经提交。

我认为你想要实现的目标已经完成,但是你测试它是否有效是有缺陷的。

于 2013-11-06T02:59:46.013 回答