如何在git中回滚到特定的提交?
有人能给我的最好答案是使用git恢复X次,直到我达到所需的提交。
假设我想要恢复到20次提交前的提交,我需要运行20次。
有更简单的方法吗?
我不能使用重置,因为这个存储库是公共的。
如何在git中回滚到特定的提交?
有人能给我的最好答案是使用git恢复X次,直到我达到所需的提交。
假设我想要恢复到20次提交前的提交,我需要运行20次。
有更简单的方法吗?
我不能使用重置,因为这个存储库是公共的。
当前回答
我不确定发生了什么变化,但如果没有分离选项,我无法签出特定的提交。对我有效的完整命令是: Git签出-detach[提交散列]
要从分离状态返回,我必须签出我的本地分支:git checkout master
其他回答
好吧,我想问题是,你说的“回滚”是什么意思?如果你不能重置因为它是公共的,你想保持提交历史完整,你的意思是你只是想让你的工作副本反映一个特定的提交吗?使用git签出和提交散列。
编辑:正如评论中指出的,使用git签出而不指定分支将使您处于“无分支”状态。使用git checkout <commit> -b <branchname>签入分支,或者git checkout <commit>。签入当前分支。
你可以在GitHub/BitBucket/Gitlab的提交部分找到与每个提交相关的提交id。 这很简单,假设你的提交id是5889575,那么如果你想回到代码中的这一部分,那么你只需要输入
git checkout 5889575 .
这将带您到代码中的那个时间点。
假设你在做一个项目,过了一天左右。您注意到有一个特性仍然出错。但是你不知道你做了什么改变导致了错误。所以你必须找出以前的工作提交。恢复到特定的提交:
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .
好的,这个commit对你有用。不会再有错误了。你指出了问题所在。现在你可以回到最近的提交:
git checkout 792d9294f652d753514dc2033a04d742decb82a5 .
在导致错误之前签出一个特定的文件(在我的例子中,我使用Gemfile.lock):
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock
这是一种处理在提交中创建的错误的方法,直到以后才会意识到这些错误。
想要HEAD分离模式?
如果你希望回滚X次到一个带有DETACHED HEAD的特定提交(意味着你不能搞砸任何事情),那么无论如何,使用以下方法:
(将X替换为您希望返回的提交次数)
git checkout HEAD~X
即返回一次提交:
git checkout HEAD~1
在git中回滚一个特定的提交:
要返回一个旧的git提交:(the ac2ec…是提交名称)
git checkout ac2ece0219689ed86b08c93dfebb0d02c0f1d5b1
命名一个你想要HEAD分离指向的新分支:
git branch get_back_to_past
结帐到分支
git checkout get_back_to_past
现在该分支有了过去的提交项。例如,如果您愿意,您可以将其合并到主数据库。
有关git头部和回滚到旧版本的更多信息:点击这里