我“不小心”向GitHub推送了一个提交。

是否可以删除此提交?

我想恢复提交之前的GitHub存储库。


当前回答

重写历史不是很好。若我们使用git-restore<commit_id>,它将创建所述提交id的干净反向提交。

这样,历史就不会被改写了,相反,每个人都知道,历史已经发生了逆转。

其他回答

你需要从你想要还原的提交中知道你的提交哈希。你可以从GitHub URL获取它,比如:https://github.com/your-organization/your-project/commits/master

假设提交的哈希(您要返回的位置)为“99fb454”(长版本“99fb 45413eb9ca4b3063e07b40402b136a8cf264”),那么您需要做的就是:

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force

在Github上找到你想成为分支负责人的提交的参考规范,并使用以下命令:

git推送原点+[ref]:[branchName]

在您的情况下,如果您只想返回一次提交,请查找该提交的ref的开头,例如它是7f6d03,以及要更改的分支的名称,例如它为master,然后执行以下操作:

git推送原点+7f6d03:主

加号被解释为--force,这是必要的,因为您正在改写历史。

请注意,任何时候你强制提交,都可能会改写合并你分支的其他人的历史。然而,如果你很快发现了问题(在其他人合并你的分支之前),你就不会有任何问题。

注意:请在下面的评论中看到gitrebase-i的替代方案-git reset—软头^

首先,删除本地存储库中的提交。您可以使用gitrebase-i来执行此操作。例如,如果是最后一次提交,可以执行gitrebase-i HEAD~2并在弹出的编辑器窗口中删除第二行。

然后,使用gitpushorigin+branchName--force强制推送到GitHub

有关更多信息,请参见Git Magic第5章:历史教训-然后是一些(例如,如果您想删除旧的提交)。

哦,如果你的工作树很脏,你必须先做一个git存储,然后再应用git存储。

如果您想删除do interactive rebase,

git rebase-i头~4

4表示要显示的提交总数,计算您的提交并相应地进行更改

并从列表中删除您想要的提交。。。

按Ctrl+X(ubuntu)或:wq(centos)保存更改

第二种方法,进行还原,

git revert 29f4a2 #your commit ID

这将恢复特定的提交

删除最近的提交,保留已完成的工作:

git reset --soft HEAD~1

删除最近的提交,销毁您已完成的工作:

git reset --hard HEAD~1