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

时间:2010-12-07 00:51:01

标签: git github

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

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

我想要改变,例如:How can I remove a commit on GitHub?

然而,git希望我做很多冲突管理。有更简单的方法吗?

6 个答案:

答案 0 :(得分:811)

git reset --hard <old-commit-id>
git push -f <remote-name> <branch-name>

注意:如下面的评论中所述,在协作环境中使用此功能非常危险:您正在重写历史记录

答案 1 :(得分:19)

另一种方式:

签出要还原的分支,然后将本地工作副本重置回您希望成为远程服务器上最新版本的提交(之后的所有内容将再次出现)。为此,在SourceTree中,我右键单击并选择“将BRANCHNAME重置为此提交”。

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

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

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

答案 2 :(得分:18)

要撤消最近的提交,请执行以下操作:

首先:

git log

获取最新的SHA ID以撤消。

git revert SHA

这将创建一个与您的提交完全相反的新提交。然后,您可以推送此新提交以使您的应用程序处于之前的状态,并且您的git历史记录将相应地显示这些更改。

这对于你刚刚提交的东西的立即重做是有好处的,我发现对我来说更常见。

正如迈克所说,你也可以这样做:

git revert HEAD

答案 3 :(得分:2)

从母版进行分支更新时,我注意到有时会单击鼠标,并使该分支也合并到母版中。找到了一种解决方法。

如果您的最后一次提交是合并,则需要多一点爱:

git revert -m 1 HEAD

答案 4 :(得分:1)

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

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

现在在本地存储库中重新创建它以指向上一个提交点。并将其添加回远程仓库中。

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

然后将本地分支推送到远程

git push -u origin master

重新添加默认分支和分支保护等。

答案 5 :(得分:0)

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

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

如果您绝对希望新分支具有相同的名称,请记住该分支基本上只是标签。只需将您的旧分支重命名为其他分支,然后在提交#80处使用所需名称创建新分支即可。