Git 如何让 git reset --hard 工作?

Git how do I get git reset --hard to work?

我已经对一个分支做了几次提交,但想恢复到特定的提交。

我使用 git log 查找提交 ID,然后我使用 git reset --hard <commit id> 但没有任何反应。然后,当我尝试推到 Github 时,我收到一条 non-fast-forward 消息。

有人知道我应该做什么吗?

执行硬重置后,您的工作树和索引现在处于执行重置后的提交状态。下次您创建任何提交时,您的存储库(以及您正在处理的分支)都会有一个新的、不同的历史记录。

要解决此问题,请在推送到 Github 时使用 --force;这将表明您承认您将通过强行将重写的新历史记录推送到存储库来丢失历史记录。

注意事项:一般来说,--force 是危险的,尤其是当您不确定自己是如何达到需要它的状态时。通常无法轻松撤消错误的强制推送。也就是说,如果您试图清除的提交有一些敏感的东西,例如 API 密钥、密码等,我不确定这是否能保证提交将被不可恢复地清除。

根据你的问题和评论,我了解到你在一个分支上进行了三个提交并将该分支推送到远程。现在您想从远程和本地分支中删除这 3 个提交。

我不确定你已经尝试过哪些选项以及你本地分支的当前状态,所以首先,我将你的分支与远程同步,然后删除前 3 个提交,然后将它们推送到远程。

我假设您的分支名称是 xyzxyz 替换为您的分支名称。

按照以下步骤操作:

  1. get fetch origin #获取远程历史
  2. git reset --hard origin/xyz # 同步 xyz 与远程
  3. git reset --hard HEAD~3 # 删除前 3 个提交
  4. git push origin xyz --force-with-lease # 将你的分支推送到远程。