Git我如何获得git reset - hard to work?

时间:2018-06-04 01:28:49

标签: git git-commit

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

警告:一般来说,--force是危险的,特别是如果你不确定你是如何达到需要状态的话。通常无法轻易撤消故障强制推送。也就是说,如果您尝试消除的提交有敏感的内容,例如API密钥,密码等,我不确定这是否会保证提交将被无法恢复。

答案 1 :(得分:1)

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

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

我假设您的分支名称是xyz,用您的分支名称替换xyz

按照以下步骤操作:

  1. get fetch origin#获取远程历史记录
  2. git reset --hard origin/xyz#synch xyz with remote
  3. git reset --hard HEAD~3 #remove top 3 commit
  4. git push origin xyz --force-with-lease#将你的分支推到遥控器上。