首先,我之前已经看到了这个问题的答案,但它被许多"答案"所掩盖,这些"答案"没有正确回答我的问题,我再也找不到了.
所以这就是:我如何将Git恢复到历史记录中的先前版本,以便它成为我当前历史记录中的新提交?
基本上,这是我想用版本控制系统做的最基本的事情.简单地执行重置不起作用,因为它抛弃了我的历史记录,简单的恢复也不起作用,因为有时它会给我错误消息(我想要做的事情应该是没有任何错误消息的).
编辑:
如果我只是做了git revert这个错误发生:
git revert HEAD~1
error: could not revert f1b44e3... Towards translating API to kernel.
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
Run Code Online (Sandbox Code Playgroud)
Dai*_*Dai 13
只需" checkout提交".这将使用您从历史记录中指定的repo快照(提交)覆盖当前工作目录,并将其设置为您可以根据需要进行分段和提交的新工作集.如果您commit之后立即执行,则您的repo将具有与您执行的提交相同的文件系统内容checkout(假设您没有其他未分级或暂存的更改)
这不会重写历史记录,也不会编辑或删除任何先前的提交 - 因此它的工作方式类似于Mediawiki上的"回滚":
cd ~/git/your-repo-root
git log
# find the commit id you want
git checkout <commitId> .
# IMPORTANT NOTE: the trailing `.` in the previous line is important!
git commit -m "Restoring old source code"
Run Code Online (Sandbox Code Playgroud)
另请参阅:回滚到公共存储库中的旧Git提交
.(点)在.(点)字符表示"当前目录" -这不是什么特别的或独特的与git,这是一个标准的命令行文件系统的惯例是在Windows,Linux,MacOS和甚至MS-DOS相同.它的工作方式类似于.."父目录".我建议阅读这些:
checkout请注意:checkout是git中的重载命令 - 它可能意味着切换分支(a la svn switch)或从历史记录中获取特定文件或提交并放入工作区(a la svn update -r <id>).它也可能意味着其他事情:https://git-scm.com/docs/git-checkout - 我很感激它会让人迷惑,特别是我在使用TFS多年后开始使用git时(其中"Checkout"意味着其他的东西)完全).
| 归档时间: |
|
| 查看次数: |
7104 次 |
| 最近记录: |