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

是否可以删除此提交?

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


当前回答

要保留分支和合并结构,在执行重基时使用--preserve merges选项非常重要:

git rebase --preserve-merges -i HEAD^^

其他回答

git reset HEAD^ --hard
git push origin -f

这对我有用。

添加/删除文件以获得所需的内容:

git rm classdir
git add sourcedir

然后修改承诺:

git commit --amend

之前的错误提交将被编辑以反映新的索引状态-换句话说,这就像您一开始就没有犯过错误一样

请注意,只有当您还没有按下时,才应该执行此操作。如果您已经推送,那么您只需正常提交修复。

如果您希望在删除后保留提交更改:

请注意,如果要删除的提交是最后一次提交的提交,则此解决方案有效。


1-从日志中复制要返回的提交引用:

git log

2-将git重置为提交引用:

 git reset <commit_ref>

3-保存/存储错误提交的本地更改,以便在推送到远程后稍后使用:

 git stash

4-将更改推送到远程存储库(-f或--force):

git push -f

5-将存储的更改恢复到本地存储库:

git stash apply

7-如果您在更改中有未跟踪的/新的文件,您需要在提交之前将它们添加到git中:

git add .

6-添加所需的任何额外更改,然后提交所需的文件(或使用点“.”而不是声明每个文件名),以提交本地存储库中的所有文件:

git commit -m "<new_commit_message>" <file1> <file2> ...

or

git commit -m "<new_commit_message>" .

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

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

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

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

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

git推送原点+7f6d03:主

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

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