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

是否可以删除此提交?

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


当前回答

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

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


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>" .

其他回答

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

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

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

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

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

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

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

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force
git push -f origin HEAD^:master

这应该会“撤销”推送。

在GitHub Desktop中,您只需右键单击提交并将其还原,这将创建一个新的提交以撤消更改。

意外提交仍将在您的历史记录中(例如,如果您意外提交了API密钥或密码,这可能是一个问题),但代码将被还原。

这是最简单和最简单的选择,公认的答案更全面。

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

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


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>" .