回滚到公共回购中的旧Git提交

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

有人可以给我的最佳答案是使用git revert X次,直到达到所需的提交。

假设我想恢复为20提交的旧提交,我必须运行20次。

有没有更简单的方法可以做到这一点?

我不能使用reset,因为此存储库是公共的。


#1楼

要回滚到特定提交:

git reset --hard commit_sha

要回滚10次提交,请执行以下操作:

git reset --hard HEAD~10

如果您不想重写历史记录,可以使用以下帖子中的“ git revert”

如何将Git存储库还原到先前的提交?


#2楼

好吧,我想问题是,“回滚”是什么意思? 如果由于公开而无法reset并且想要保持提交历史记录完整,那是否意味着您只希望工作副本反映特定的提交? 使用git checkout和提交哈希。

编辑:正如评论中指出的那样,使用git checkout而不指定分支将使您处于“无分支”状态。 使用git checkout <commit> -b <branchname>签入分支,或git checkout <commit> . 签入当前分支。


#3楼

尝试这个:

git checkout [revision] .

其中[revision]是提交哈希(例如: 12345678901234567890123456789012345678ab )。

别忘了. 最后,非常重要。 这会将更改应用于整个树。 您应该在git项目根目录中执行此命令。 如果您在任何子目录中,那么此命令仅更改当前目录中的文件。 然后提交,你应该很好。

您可以通过以下方式撤消该操作

git reset --hard 

它将删除工作目录和登台区域中的所有修改。


#4楼

原始海报指出:

有人可以给我的最佳答案是使用git revert X次,直到达到所需的提交。

假设我想恢复为20提交的旧提交,我必须运行20次。

有没有更简单的方法可以做到这一点?

我无法使用重置,因为此回购是公开的。

不必使用git revert X次。 git revert可以接受提交范围作为参数,因此您只需要使用一次即可恢复提交范围。 例如,如果您想还原最近的20次提交:

git revert --no-edit HEAD~20..

提交范围HEAD~20..HEAD HEAD~20..HEAD~20..HEAD ,表示“从HEAD提交的 20 父级开始,并将所有提交恢复到HEAD”。

假设所有这些都不是合并提交 ,它将还原最后20次提交。 如果存在合并提交,那么您将无法在一个命令中全部还原它们,需要使用以下命令分别还原它们:

git revert -m 1 <merge-commit>

还要注意,我已经使用git版本1.9.0在git revert范围内进行了测试。 如果您使用的是git的旧版本,则使用带有git revert的范围可能有效,也可能无效。

在这种情况下, git revert优于git checkout

请注意,与使用git checkout答案不同, git revert实际上将删除在您要还原的任何提交中添加的所有文件 ,这使之成为还原一系列修订版本的正确方法。

文献资料


#5楼

git read-tree -um @ $commit_to_revert_to

会做的。 这是“ git checkout”,但不更新HEAD。

您可以达到相同的效果

git checkout $commit_to_revert_to
git reset --soft @{1}

如果您更喜欢将便捷命令串在一起。

这些使您的工作树和索引处于所需的状态,您只需git commit即可完成。


#6楼

第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
...

步骤2:复制所需的提交哈希并将其粘贴以进行结帐:

git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f

就这样。


#7楼

我不确定发生了什么更改,但是如果没有--detach选项,我将无法检出特定的提交。 对我git checkout --detach [commit hash]的完整命令是: git checkout --detach [commit hash]

为了脱离分离状态,我必须检出本地分支: git checkout master


#8楼

假设您在一天左右的时间内从事一个项目。 您会注意到一项功能仍在给您错误。 但是您不知道所做的更改导致了错误。 因此,您必须钓鱼以前的工作提交。 要还原为特定的提交,请执行以下操作:

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .

好的,这样提交就可以为您工作。 没有更多的错误。 您指出了问题所在。 现在您可以返回到最新提交:

git checkout 792d9294f652d753514dc2033a04d742decb82a5 .

并在导致错误之前检出特定文件(在我的情况下,我使用示例Gemfile.lock):

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

这是处理在提交中创建的错误而不等到以后才意识到的一种方法。


#9楼

这是一个例子

    cd /yourprojects/project-acme 


    git checkout efc11170c78 .

#10楼

要HEAD分离模式吗?

如果您希望将X时间回退到带有DETACHED HEAD的某个提交(这意味着您什么都不会弄乱),那么请务必使用以下命令:

(用您希望返回的提交数替换X)

git checkout HEAD~X

IE浏览器回退一次提交:

git checkout HEAD~1

#11楼

您可以在GitHub / BitBucket / Gitlab的commits部分中找到与每个提交相关的提交ID。 非常简单,假设您的提交ID为5889575,那么如果您想返回到代码的这一部分,则只需键入

git checkout 5889575 .

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值