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

Jon*_*sco 413 git github

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

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

我想要改变,就像在这个例子中:我怎样才能删除GitHub上的提交?

但是,git希望我做很多冲突管理.有更简单的方法吗?

jtd*_*ubs 845

git reset --hard <old-commit-id>
git push -f <remote-name> <branch-name>
Run Code Online (Sandbox Code Playgroud)

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

  • 人们,做`git push -f origin branch`.我只是玩得很​​开心,因为我错过了. (39认同)
  • 你可能需要做`git push origin HEAD --force`而不是`git push -f origin branch`,因为它给了我一个`错误:src refspec branch不匹配任何错误. (24认同)
  • 请注意这个!你将失去你在本地的所有提交,如果你推,那将无法回头 (18认同)
  • 事实并非如此,您可以使用git reflog获取旧提交 (8认同)

Com*_*ast 19

其他方式:

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

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

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

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

  • 如果你打破这个命令并解释它会更有帮助. (3认同)

Nic*_*Res 18

要撤消最近的提交,我执行此操作:

第一:

git log
Run Code Online (Sandbox Code Playgroud)

获取最新的SHA ID以撤消.

git revert SHA
Run Code Online (Sandbox Code Playgroud)

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

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

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

git revert HEAD
Run Code Online (Sandbox Code Playgroud)

  • `git revert HEAD`将恢复最后一次提交,而不必查找哈希值. (7认同)

Ion*_*san 6

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

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

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


小智 5

当从 master 进行分支更新时,我注意到有时会过度单击,并导致分支也合并到 master 中。找到了一种方法来撤销它。

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

git revert -m 1头