如何在git中回滚到特定的提交?

有人能给我的最好答案是使用git恢复X次,直到我达到所需的提交。

假设我想要恢复到20次提交前的提交,我需要运行20次。

有更简单的方法吗?

我不能使用重置,因为这个存储库是公共的。


当前回答

假设你在做一个项目,过了一天左右。您注意到有一个特性仍然出错。但是你不知道你做了什么改变导致了错误。所以你必须找出以前的工作提交。恢复到特定的提交:

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .

好的,这个commit对你有用。不会再有错误了。你指出了问题所在。现在你可以回到最近的提交:

git checkout 792d9294f652d753514dc2033a04d742decb82a5 .

在导致错误之前签出一个特定的文件(在我的例子中,我使用Gemfile.lock):

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock

这是一种处理在提交中创建的错误的方法,直到以后才会意识到这些错误。

其他回答

回退到特定的提交:

git reset --hard commit_sha

回滚10次提交:

git reset --hard HEAD~10

如果你不想重写历史,你可以像下面的帖子一样使用“git revert”

如何将Git存储库恢复到以前的提交?

这里有一个例子

    cd /yourprojects/project-acme 


    git checkout efc11170c78 .

你可以在GitHub/BitBucket/Gitlab的提交部分找到与每个提交相关的提交id。 这很简单,假设你的提交id是5889575,那么如果你想回到代码中的这一部分,那么你只需要输入

git checkout 5889575 .

这将带您到代码中的那个时间点。

试试这个:

git checkout [revision] .

其中[revision]是提交散列(例如:123456789012345678901234567890123456789012345678ab)。

别忘了。最后,非常重要。这将对整个树应用更改。你应该在git项目的根目录下执行这个命令。如果您在任何子目录中,则此命令只更改当前目录中的文件。然后承诺,你应该是好的。

你可以通过

git reset --hard 

这将从工作目录和暂存区域删除所有修改。

想要HEAD分离模式?

如果你希望回滚X次到一个带有DETACHED HEAD的特定提交(意味着你不能搞砸任何事情),那么无论如何,使用以下方法:

(将X替换为您希望返回的提交次数)

git checkout HEAD~X

即返回一次提交:

git checkout HEAD~1