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

是否可以删除此提交?

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


当前回答

首先将本地更改保存在一旁的某个位置(备份)

您可以浏览最近的提交,然后单击“复制完整SHA”按钮将其发送到剪贴板。

如果您的最后一个提交哈希是,那么让我们说g0834hg304gh3084gh(例如)

您必须运行:

git推送原点+g0834hg304gh3084gh:主

使用您先前复制的哈希,使其成为“HEAD”版本。

添加所需的本地更改。完成;)

其他回答

如果你这样做是因为你在提交中有敏感数据,那么使用这里的其他答案是不安全的(除了subtux的,我将进一步讨论)。

github指南建议使用外部工具,但我更喜欢使用内置工具。

首先,备份存储库。然后:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all

之后,确保存储库处于所需的状态。您可能需要与备份进行比较。

如果你确定这是正确的,那么:

#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all

您可能需要保留本地备份一段时间,以防万一。

在终端上运行此命令。

git reset HEAD~n

您可以从本地repo中删除最后n个提交,例如HEAD~2。继续在存储库上强制git推送。

git push -f origin <branch>

希望这有帮助!

要从远程存储库中删除提交,请执行以下操作:

 git push -f origin last_known_good_commit:branch_name

要从本地存储库中删除提交,请执行以下操作:

git reset --hard HEAD~1

link

对于GitHub

在本地存储库中重置提交(HARD)创建新分支推送新分支删除旧分支(如果要删除主分支,请将新分支作为默认分支)

首先将本地更改保存在一旁的某个位置(备份)

您可以浏览最近的提交,然后单击“复制完整SHA”按钮将其发送到剪贴板。

如果您的最后一个提交哈希是,那么让我们说g0834hg304gh3084gh(例如)

您必须运行:

git推送原点+g0834hg304gh3084gh:主

使用您先前复制的哈希,使其成为“HEAD”版本。

添加所需的本地更改。完成;)