如何将公共 Git 存储库恢复到特定的先前提交?

Posted

技术标签:

【中文标题】如何将公共 Git 存储库恢复到特定的先前提交?【英文标题】:How to Revert Public Git Repo to Specific Previous Commit? 【发布时间】:2019-10-30 01:53:54 【问题描述】:

我想将我最近克隆的公共回购恢复到一年前的以前版本。我不想进行硬还原。

我已经试过了:

cd MyRepo
git revert --no-commit dc3b4359.. 

但是我收到了这个错误:

error: could not revert dc3b4359...
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'

我是这方面的新手;什么代码可以用来安全地做到这一点?提前致谢。

【问题讨论】:

“硬还原”是什么意思?存储库中的文件应该如何处理,历史记录应该如何处理? 这不是错误。这是conflict。但作为旁注,恢复大量这样的提交似乎是一个不必要的负担。你为什么排除硬重置(我猜你的意思是硬重置,因为硬恢复是没有意义的) 您尝试还原单个提交。 Git 通过追加更改来做到这一点,这与 dc3b4359 正好相反。该更改与之后发生的其他提交冲突。 @StijnHaezebrouck 关于revert 行为的一般观点是正确的,但 OP 的命令不会恢复 single 提交。它会还原整个范围(注意双点)。 @RomainValeri 你当然是对的,忽略了那些 【参考方案1】:

(已编辑)(感谢@torek)

最粗暴的方法是:

cd MyRepo
git rm -r .
git checkout dc3b4359 -- .
git add .
git commit -m "Going back in time"
git push origin master

原答案:

cd MyRepo
rm -rf * # if you have files starting with '.', delete them too.
git checkout dc3b4359 -- .
git add .
git commit -m "Going back in time"

【讨论】:

有时最好使用git rm 这样您就不会打扰未跟踪的文件,但是是的,该方法可以在本地存储库中使用;然后,OP 将需要 git push 生成的提交。

以上是关于如何将公共 Git 存储库恢复到特定的先前提交?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 git 分支恢复到指定的提交?

如何将 git 存储库回滚到特定提交?

如何将多个 Git 提交(已推送)还原到已发布的存储库?

如何将项目恢复到android studio中的先前提交

恢复到 Git 中的特定提交 [重复]

在 git 中,如何将文件恢复到 3 次提交前?