繁体   English   中英

如何将Git存储库回滚(重置)到特定的提交? [重复]

[英]How do you roll back (reset) a Git repository to a particular commit? [duplicate]

这个问题在这里已有答案:

我克隆了一个Git存储库,然后尝试在开发过程的早期将其回滚到特定的提交。 在该点之后添加到存储库的所有内容对我来说都不重要,因此我想省略本地源代码中的所有后续更改。

但是,当我尝试回滚GUI工具时,它不会更新我的本地文件系统 - 我总是最终得到项目的最新源代码。

从项目历史中的特定提交中获取存储库的源代码的正确方法是什么,并省略所有后续更新?

git reset --hard <tag/branch/commit id>

笔记:

  • 没有--hard选项的git reset重置提交历史记录,但不会重置文件。 使用--hard选项,工作树中的文件也会重置。 贷方用户

  • 如果您希望提交该状态,以便远程存储库也指向回滚提交,请执行以下操作: git push <reponame> -f贷记用户

更新:

由于更改跟踪分支的创建和推送方式,我不再建议重命名分支。 这就是我现在推荐的:

以当前状态制作分支的副本:

git branch crazyexperiment

git branch <name>命令将使您仍然检出当前分支。)

使用git reset将当前分支重置为所需的提交:

git reset --hard c2e7af2b51

(将c2e7af2b51替换为您要返回的提交。)

当您确定您的疯狂实验分支不包含任何有用的内容时,您可以使用以下命令将其删除:

git branch -D crazyexperiment

当您开始使用历史记录修改git命令(重置,rebase)以在运行它们之前创建备份分支时,总是很好。 最后一旦你感到舒服,你就不会觉得有必要。 如果您确实以您不想要的方式修改历史记录并且尚未创建备份分支,请查看git reflog 即使没有指向它们的分支或标签,Git也会保持一段时间的提交。

原始答案:

git reset --hard方法更难以实现的方法是创建一个新分支。 假设您在master分支上,并且要返回的提交是c2e7af2b51

重命名当前的主分支:

git branch -m crazyexperiment

看看你的好承诺:

git checkout c2e7af2b51

在这里建立你的新主分支:

git checkout -b master

现在,如果您想稍后查看它,您仍然可以进行疯狂的实验,但是您的主分支又回到了您最后已知的优点,准备添加到。 如果您真的想丢弃实验,可以使用:

git branch -D crazyexperiment

对于那些有git gui弯曲的人,你也可以使用gitk。

右键单击要返回的提交,然后选择“将master branch重置为here”。 然后从下一个菜单中选择硬盘。

当你说'GUI工具'时,我假设你正在使用Git For Windows。

重要的是,如果你还没有,我强烈建议你创建一个新的分支。 这样,在测试更改时,您的主人可以保持不变。

使用GUI,您需要“回滚此提交”,就像您拥有视图右侧的历史记录一样。 然后您会注意到您将所有不需要的文件作为左侧提交的更改。 现在,您需要右键单击所有未提交文件上方的灰色标题,然后选择“忽略更改”。 这会将您的文件设置回这个版本中的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM