回滚到公共回购中的旧Git提交
如何回滚到git中的特定提交 有人能给我的最好答案是使用回滚到公共回购中的旧Git提交,git,git-checkout,git-revert,Git,Git Checkout,Git Revert,如何回滚到git中的特定提交 有人能给我的最好答案是使用git revertX次,直到达到所需的提交 假设我想恢复到一个20次提交的提交,我必须运行它20次 有没有更简单的方法 我无法使用重置,因为此存储库是公共的。我想问题是,“回滚”是什么意思?如果您无法重置,因为它是公共的,并且您希望保持提交历史记录的完整性,您的意思是只希望您的工作副本反映特定的提交?使用git checkout和提交散列 编辑:正如评论中指出的,使用git checkout而不指定分支将使您处于“无分支”状态。使用git
git revert
X次,直到达到所需的提交
假设我想恢复到一个20次提交的提交,我必须运行它20次
有没有更简单的方法
我无法使用重置,因为此存储库是公共的。我想问题是,“回滚”是什么意思?如果您无法
重置,因为它是公共的,并且您希望保持提交历史记录的完整性,您的意思是只希望您的工作副本反映特定的提交?使用git checkout
和提交散列
编辑:正如评论中指出的,使用git checkout
而不指定分支将使您处于“无分支”状态。使用git checkout-b
签入分支,或使用git checkout.
签入当前分支。尝试以下操作:
git checkout [revision] .
其中,[revision]
是提交散列(例如:1234567890012345678901234567890123456789012345678ab
)
不要忘记结尾的
,这非常重要。这将对整个树应用更改。您应该在git项目根目录中执行此命令。如果您在任何子目录中,则此命令仅更改当前目录中的文件。然后承诺,你应该是好的
您可以通过以下方法撤消此操作:
git reset --hard
这将删除工作目录和临时区域中的所有修改。要回滚到特定提交:
git reset --hard commit_sha
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .
要回滚10次提交,请执行以下操作:
git reset --hard HEAD~10
如果您不想重写历史记录,可以像下面的帖子一样使用“git revert”
原始海报上写道:
有人能给我的最好答案是使用git revert
X次,直到我
达到所需的提交
假设我想恢复到一个20次提交的提交,我会
运行20次
有没有更简单的方法
我无法使用重置,因为此回购是公开的
无需使用git revert
X次git revert
可以接受
将范围作为参数提交,因此只需使用它一次即可恢复范围
提交次数。例如,如果要恢复最后20次提交:
git revert --no-edit HEAD~20..
提交范围HEAD~20..
是HEAD~20..HEAD
的缩写,表示“从HEAD提交的第20个父级开始,然后将所有提交还原到HEAD”
这将恢复最后20次提交,假设这些提交都没有合并
提交。如果存在合并提交,则无法在一个命令中全部还原,您需要使用
git revert -m 1 <merge-commit>
git还原-m 1
请注意,我已经使用git 1.9.0版测试了git revert的范围。如果您使用的是较旧版本的git,则使用git revert的范围可能有效,也可能无效
在这种情况下,git revert
优于git checkout
请注意,与之不同,git revert
将实际删除在您正在执行的任何提交中添加的任何文件
还原,这是还原一系列修订的正确方法
文档
我会的。这是“git checkout”,但没有更新HEAD
您可以通过以下方式实现相同的效果:
git checkout $commit_to_revert_to
git reset --soft @{1}
如果您喜欢将方便命令串接在一起
这些将使您的工作树和索引处于所需状态,您只需git commit
即可完成。步骤1:获取提交列表:
git log
您将得到如下示例中所示的列表:
[Comp:Folder User$ git log
commit 54b11d42e12dc6e9f070a8b5095a4492216d5320
Author: author <author@gmail.com>
Date: Fri Jul 8 23:42:22 2016 +0300
This is last commit message
commit fd6cb176297acca4dbc69d15d6b7f78a2463482f
Author: author <author@gmail.com>
Date: Fri Jun 24 20:20:24 2016 +0300
This is previous commit message
commit ab0de062136da650ffc27cfb57febac8efb84b8d
Author: author <author@gmail.com>
Date: Thu Jun 23 00:41:55 2016 +0300
This is previous previous commit message
...
仅此而已。我不确定发生了什么变化,但如果没有--detach
选项,我无法签出特定的提交。对我有效的完整命令是:
git签出——分离[commit hash]
要从分离状态返回,我必须签出我的本地分支:git checkout master
假设您在一个项目上工作,大约一天后。您注意到一个特性仍然会给您带来错误。但您不知道是什么更改导致了错误。因此,您必须捕获以前的工作提交。要恢复到特定提交,请执行以下操作:
git reset --hard commit_sha
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .
好的,那么commit对您有效。没有更多的错误。你指出了问题所在。现在,您可以返回到最新提交:
git checkout 792d9294f652d753514dc2033a04d742decb82a5 .
并在导致错误之前签出特定文件(在我的示例中,我使用Gemfile.lock):
这是一种处理您在提交中创建的错误的方法,直到以后才意识到错误。下面是一个这样做的示例
cd /yourprojects/project-acme
git checkout efc11170c78 .
想要头部分离模式吗?
如果您希望使用分离的头将X时间回滚到某个提交(意味着您不能搞乱任何事情),那么请务必使用以下方法:
(将X替换为您希望返回的提交次数)
即返回一次提交:
git checkout HEAD~1
您可以在GitHub/BitBucket/Gitlab的commits部分找到与每个提交相关的提交id。
这非常简单,假设您的提交id是5889575,那么如果您想返回代码中的这一部分,那么您只需键入
git checkout 5889575 .
这将把您带到代码中的那个时间点。git revert不起作用?如我在问题中所述,如果我想恢复到20年前的某个时间点,这对我真的没有帮助。这个问题在这里得到了很好的回答,不清楚“回滚”是什么意思。这是否意味着您要临时将工作副本切换到特定版本?或者您确实想将存储库的历史记录永久还原回某个版本?您应该接受一个答案,并可能投票支持您喜欢的任何其他答案。这难道不会让您陷入奇怪的“当前不在任何分支机构”中吗
git checkout HEAD~1
git checkout 5889575 .