【问题标题】:git revert back to certain commit [duplicate]git恢复到某个提交[重复]
【发布时间】:2011-10-11 06:26:09
【问题描述】:

如何将本地副本上的所有文件恢复为某个提交?

commit 4a155e5b3b4548f5f8139b5210b9bb477fa549de
Author: John Doe <Doe.John.10@gmail.com>
Date:   Thu Jul 21 20:51:38 2011 -0500

这是我想要恢复的提交。任何帮助都是救命稻草!

【问题讨论】:

  • @WilliamPursell - 你为什么删除你的答案?你的似乎是最明智的一个。还原后,OP 可以提交和推送(也就是说,他有一个工作仓库)。下面的所有答案都使 repo 处于无用的状态。

标签: git commit revert


【解决方案1】:

git reset --hard 4a155e5 会将 HEAD 移回您想要的位置。如果您不希望任何内容指向您刚刚删除的历史记录,则可能需要在此之前删除其他引用。

【讨论】:

  • 我一直在使用这种方法,但是您需要做什么才能安全地在另一台机器上提交? (而不是git pull -f origin master
  • @jww 问题是“你如何恢复到某个提交” 这个答案怎么错了?
  • 听从了建议之后就不能提交和推送了。在错误的提交被撤销后,你无能为力的 repo 有什么好处?
  • 您假设用户有一个他们正在跟踪的远程存储库,并且他们已经将错误的提交推送到该存储库。
  • 在本地执行 'git reset --hard ' 后,如果您尝试将最新更改提交到远程分支,您很可能会收到错误消息,指出“您的分支落后于原点” '。发生这种情况时,您需要使用 f 标签 'git push -f' 强制推送
【解决方案2】:

您可以通过输入以下命令来恢复工作目录和索引下的所有文件

git reset --hard <SHAsum of your commit>

你也可以输入

git reset --hard HEAD #your current head point

git reset --hard HEAD^ #your previous head point

希望对你有帮助

【讨论】:

  • revert 不是正确的命令。 revert 应用撤消先前提交的新提交。它不需要--hard 选项。
  • @Charles:为什么不正确?它确实需要 --hard 选项
  • 阅读文档,revert 撤消由单个提交引入的更改,它不会将索引和工作树重置为特定提交,这就是提问者在寻找。这就是reset 所做的。 reset 确实采用 --hard 选项。
  • 另一个关于 Stack Overflow 的错误答案...您不能提交这些更改。见Commit and push changes after going back to a particular revision in the repository?
  • 这是一个非常糟糕的方法。我刚刚丢失了所有最近的提交!
【解决方案3】:

http://www.kernel.org/pub/software/scm/git/docs/git-revert.html

使用git revert &lt;commit&gt; 将创建一个新的提交,该提交将还原您不想要的提交。

您可以指定要恢复的提交列表。

另一种选择:http://git-scm.com/docs/git-reset

git reset 会将您的副本重置为您想要的提交。

【讨论】:

  • git reset --hard更安全,后者更干净。
猜你喜欢
  • 2014-05-02
  • 2017-05-16
  • 2021-01-22
  • 2018-11-10
  • 2016-06-23
  • 2021-04-13
  • 2021-06-20
  • 1970-01-01
  • 2019-01-12
相关资源
最近更新 更多