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

我的回购现在有100个提交。我需要回滚存储库以提交80个,并删除所有后续的存储库。

为什么?

这个回购应该是从杂项用户合并。由于过度的编辑,我提交了一堆合并。这是由于我的远程分支的错误标记,其中3个开发人员被彼此标记。我需要重置到那个点,然后向前拉。

我想要重设基数,就像这个例子:如何在GitHub上删除提交?

然而,git想让我做很多冲突管理。有没有更简单的方法?

522858 次浏览
git reset --hard <old-commit-id>
git push -f <remote-name> <branch-name>

注:如下面的注释中所写,在协作环境中使用这个是危险的:你正在重写历史 . 0

另一种方法:

签出要恢复的分支,然后将本地工作副本重置为远程服务器上的最新提交(之后的所有内容都将告别)。要做到这一点,在SourceTree中,我右键单击并选择“Reset BRANCHNAME To this commit”。

然后导航到存储库的本地目录并运行以下命令:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f -- tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

这将删除本地存储库中当前提交之后的所有提交,但只针对该分支。

要撤消最近的提交,我这样做:

第一:

git log

获取要撤消的最新SHA id。

git revert SHA

这将创建一个与您的提交完全相反的新提交。然后你可以推这个新提交,把你的应用带到它之前的状态,你的git历史将相应地显示这些变化。

这有利于你立即重新做你刚刚做过的事情,我发现这对我来说是更常见的情况。

正如Mike提到的,你也可以这样做:

git revert HEAD

当从master进行分支更新时,我注意到我有时会过度单击,导致分支也合并到master中。找到了补救的方法。

如果你上次提交的是合并,你需要更多的爱:

git恢复-m 1 HEAD

在github中,最简单的方法是在github UI中,在分支选项卡下删除远程分支。你必须确保删除以下设置,使分支可删除:

  1. 不是默认分支
  2. 没有开始投票请求。
  3. 该分支不受保护。

现在在本地存储库中重新创建它,以指向以前的提交点。并将其添加回远程回收。

git checkout -b master 734c2b9b   # replace with your commit point

然后将本地分支推到远程

git push -u origin master

添加回默认分支和分支保护等。

大多数建议都假设你需要以某种方式销毁最后20次提交,这就是为什么它意味着“重写历史”,但你不必这么做。

只需从commit #80创建一个新分支,并继续处理该分支。其他20个提交将留在旧的孤立分支上。

如果您确实希望新分支具有相同的名称,请记住,分支基本上只是标签。只需将旧分支重命名为其他名称,然后在提交#80时使用您想要的名称创建新分支。