如何在git中回滚到特定的提交?
有人能给我的最好答案是使用git恢复X次,直到我达到所需的提交。
假设我想要恢复到20次提交前的提交,我需要运行20次。
有更简单的方法吗?
我不能使用重置,因为这个存储库是公共的。
如何在git中回滚到特定的提交?
有人能给我的最好答案是使用git恢复X次,直到我达到所需的提交。
假设我想要恢复到20次提交前的提交,我需要运行20次。
有更简单的方法吗?
我不能使用重置,因为这个存储库是公共的。
当前回答
你可以在GitHub/BitBucket/Gitlab的提交部分找到与每个提交相关的提交id。 这很简单,假设你的提交id是5889575,那么如果你想回到代码中的这一部分,那么你只需要输入
git checkout 5889575 .
这将带您到代码中的那个时间点。
其他回答
试试这个:
git checkout [revision] .
其中[revision]是提交散列(例如:123456789012345678901234567890123456789012345678ab)。
别忘了。最后,非常重要。这将对整个树应用更改。你应该在git项目的根目录下执行这个命令。如果您在任何子目录中,则此命令只更改当前目录中的文件。然后承诺,你应该是好的。
你可以通过
git reset --hard
这将从工作目录和暂存区域删除所有修改。
回退到特定的提交:
git reset --hard commit_sha
回滚10次提交:
git reset --hard HEAD~10
如果你不想重写历史,你可以像下面的帖子一样使用“git revert”
如何将Git存储库恢复到以前的提交?
最初的海报写道:
有人能给我的最好答案是使用git恢复X次,直到I 达到所需的提交。 假设我想要恢复到20次提交前的提交 运行20次。 有更简单的方法吗? 我不能使用重置,因为这个回购是公共的。
没有必要使用git revert X次。Git恢复可以接受 提交range作为参数,因此只需要使用它一次就可以还原一个范围 的提交。例如,如果你想恢复最近20次提交:
git revert --no-edit HEAD~20..
提交范围HEAD~20..是HEAD~20的简称。HEAD,意思是“从HEAD提交的第20个父节点开始,并将它之后的所有提交还原到HEAD”。
这将恢复最后20次提交,假设这些都不是合并 提交。如果存在合并提交,那么您不能在一个命令中全部恢复它们,您需要分别使用
git revert -m 1 <merge-commit>
还请注意,我已经使用git 1.9.0版本的git恢复测试了一个范围。如果你使用的是较旧版本的git,使用带git revert的range可能会工作,也可能不会工作。
在这种情况下,git revert优先于git checkout。
注意,不像这个回答说使用git checkout, git revert 会移除任何提交中添加的文件 还原,这使得这是还原一系列修订的正确方法。
文档
git-revert(1)手册页。 提交范围。
好吧,我想问题是,你说的“回滚”是什么意思?如果你不能重置因为它是公共的,你想保持提交历史完整,你的意思是你只是想让你的工作副本反映一个特定的提交吗?使用git签出和提交散列。
编辑:正如评论中指出的,使用git签出而不指定分支将使您处于“无分支”状态。使用git checkout <commit> -b <branchname>签入分支,或者git checkout <commit>。签入当前分支。
你可以在GitHub/BitBucket/Gitlab的提交部分找到与每个提交相关的提交id。 这很简单,假设你的提交id是5889575,那么如果你想回到代码中的这一部分,那么你只需要输入
git checkout 5889575 .
这将带您到代码中的那个时间点。