我已经对一个分支进行了几次提交,但想恢复到特定的提交。
我使用git log
来查找提交 ID,然后使用git reset --hard <commit id>
但没有任何反应。然后,当我尝试推送到 Github 时,我会收到一条non-fast-forward
消息。
有人知道我应该做什么吗?
执行硬重置后,工作树和索引现在处于执行重置的提交状态。下次创建任何提交时,您将拥有存储库(以及您正在处理的分支(的新、不同的历史记录。
要解决此问题,请在推送到 Github 时使用--force
;这将表明您承认,通过将新的重写历史记录强行推送到存储库,您将丢失历史记录。
警告:一般来说,--force
是危险的,特别是如果你不确定你是如何达到需要它的状态的。通常无法轻松撤消错误的强制推送。也就是说,如果您尝试清除的提交具有敏感内容,例如 API 密钥、密码等,我不确定这是否保证提交将被不可恢复地清除。
根据您的问题和评论,据我所知,您在一个分支上进行了三次提交,并将该分支推送到远程。 现在您想从远程和本地分支中删除这 3 个提交。
我不确定您已经尝试了哪些选项以及本地分支的当前状态如何,因此首先,我将分支与远程同步,然后删除前 3 个提交,然后将它们推送到远程。
我假设您的分支名称xyz
将xyz
替换为您的分支名称。
请按照以下步骤操作:
get fetch origin
#to获取远程历史记录git reset --hard origin/xyz
# 与远程同步xyz
git reset --hard HEAD~3
# 删除前 3 个提交git push origin xyz --force-with-lease
# 在遥控器上推送您的分支。