【问题标题】:Reverting to previous commit on Git (with no human interaction)恢复到之前在 Git 上的提交(无需人工交互)
【发布时间】:2017-06-09 12:30:43
【问题描述】:

我发现了一些关于如何使用 Git 还原的问题,但这些问题总是需要人工交互或需要您要还原到哪个版本。在这种情况下,没有人工交互,您也没有告诉机器必须恢复到哪个版本。

给定一台远程自动化机器,它有一个克隆的 git repo,每次你在其界面上按下“拉”按钮时都会拉动,是否有可能实现恢复到上一次提交的功能?

我可以轻松添加按钮,但我不确定如何执行该功能。我的意思是,我需要知道 git 是否有一个命令可以为您提供其分支的先前提交,然后是一个将本地 repo 状态更改为先前提交的命令。

这台机器不做任何提交,它只有克隆代码,它只是为代码更新做一些拉动。现在有了这个新按钮,它将能够恢复到以前的版本。

这可能吗?

【问题讨论】:

标签: git git-revert


【解决方案1】:

最后我用这个解决了:

git reset --hard $SHA1

$SHA1 是您要获取的修订版本的 ID。

稍后,当您想再次使用 repo 的所有提交进行更新时,您只需要这样做:

git pull

【讨论】:

  • 既然您似乎认为 HEAD@{1} 不能满足您的需求,但指定一些 $SHA1 确实如此,您是否愿意解释一下您如何知道上一次提交的 id 以及它与使用 reflog?
  • 我将通过一个字段传递它,因为 HEAD@{1} 给出错误:“致命:'master' 的日志只有 1 个条目。”
  • 经过一番研究,我不确定究竟什么是 reflog 以及如何安全使用它
【解决方案2】:

以下操作会将 master 分支恢复到上一个​​更改 master 分支的命令之前的状态,无论它是什么,commit、merge、rebase、filter-branch...

git reset --hard master@{1}

【讨论】:

  • 无法使用您在 google 上告诉我的参数找到有关此命令的任何信息
  • 我不知道为什么有人反对它。该命令完全符合我的描述。也许downvoter在你的问题中读到了“Revert”,我没有给你一个命令来恢复而是重置,但重置实际上就是你的意思。
  • 您可以在git-scm.com/docs/git-reset 阅读有关reset 的信息,并在git-scm.com/docs/git-rev-parse 阅读有关最后一个参数的格式的信息。 reset --hard 确实将当前分支指针移动到给定的 commit-ish 并使用此状态更新工作树。 master@{1} 是分支 master 的引用日志中的倒数第二个条目,因此您必须将其更改为您正在谈论的分支,或者如果针对不同的分支动态请求它。您执行的每个更改分支指针的操作(例如我列出的示例)都会在 reflog 中留下一个条目。
  • 谢谢,但您的命令不起作用,它给出了以下错误:致命:“master”的日志只有 1 个条目。最后我发现了解决方案并将其发布在一个新的答案中,但我为你的帮助投了赞成票
  • 如果您有 SHA,您的解决方案当然可以工作。我的只有在启用了分支的 reflog 时才有效。但通常情况应该如此。您可以在 git-scm.com/docs/git-config 之后检查 reflogs 的配置。
猜你喜欢
  • 2013-04-28
  • 1970-01-01
  • 2021-10-27
  • 2020-04-29
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 2021-04-13
相关资源
最近更新 更多