git - 你如何回滚( 复位) Git存储库和一个特定的提交?

  显示原文与译文双语对照的内容

这个问题已经有了如下答案:

我克隆git存储库,然后试图向一个特定的回滚该事务提交在开发过程的早期。 所有添加到存储库之后,这一点对我来说是不重要的所以我想省略所有后续更改本地源代码。

然而,当我试图回滚的gui工具它不更新我的本地文件系统——我总是得到最新的项目的源代码。

正确的方法是什么把存储库的源代码作为特定历史上提交的项目和省略所有后来更新?

时间:


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


  • git reset 没有 --hard 选项重置提交历史,而不是文件。 使用 --hard 选项,工作树中的文件也被重置。 ( 贷记用户 )

  • 如果你希望提交该状态,那么远程仓库也会指向回滚提交: git push <reponame> -f ( 贷记用户 )

更新:

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

在当前状态创建分支副本:


git branch crazyexperiment

( git branch <name> 命令将使你当前的分支仍签出。)

使用 git reset 。exe将当前分支重置为你想要的提交:


git reset --hard c2e7af2b51

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

当你决定你的疯狂实验分支不包含任何有用的东西时,你可以用以下方法删除它:


git branch -D crazyexperiment

在使用 history-modifying git命令( 复位,复位) 启动备份分支之前,总是很好。 一旦你感到舒服,你就不会发现。 如果你确实以不需要的方式修改历史,并且没有创建备份分支,请查看 git reflog 。 即使没有指向它们的分支或者标记,Git仍然会持续提交一段时间。

原始答案:

git reset --hard 方法稍微吓人一点的方法是创建一个新分支。 假设你位于 master 分支,并且你想要返回的提交是 c2e7af2b51

重命名你当前的主分支:


git branch -m crazyexperiment

检查你的好提交:


git checkout c2e7af2b51

在这里创建新的主分支:


git checkout -b master

现在你仍然有你的疯狂的实验,如果你想看它之后,但是你的主分支回到你最后好点,可以被添加到。 如果你真的想扔掉实验,你可以使用:


git branch -D crazyexperiment

...