需要删除错误提交并保留git中的本地更改

时间:2011-10-31 14:44:15

标签: git version-control revert

我们的git项目存在问题:

  • 错误的更改被推送到远程存储库
  • 一台机器没有pull - 更改了错误的更改,但有未提交的本地更改

我们希望摆脱远程存储库中的错误更改,然后推送好的更改。

我们对git不是很有经验,并且害怕搞砸它并失去未提交的,好的变化。我们不确定是否需要使用git revertgit rebase(或其他内容),以及使用哪台计算机(即来自没有良好更改的计算机?)。

1 个答案:

答案 0 :(得分:3)

首先:不要惊慌

  

这是一个修订控制系统 它存在,因此您不能轻易丢失信息。

您可以随时保存作品:

git checkout -b RESCUE_THIS
git add .
git commit -am 'Do not loose this commit!'

从那里拿走。

我建议:

  1. 还原错误提交

    • git reset HEAD @ {1}#如果是最后一次提交

      您需要确定要保留哪些更改并将其提交到新提交中。 注意使用git reflog查找'HEAD @ {1} part that you want. Take your time as this can be a bit confusing when comparing to git log`

    • git revert bad-commit-id#如果不是

      注意找到要使用git log还原的修订版。您可以还原多个提交。按逆时间顺序还原它们。每个恢复将导致新提交'撤消'来自该提交的机会。
      如果你发现自己还原了很多提交,你可能想要改变。

  2. 强制将固定分支推送到中央仓库

    • git push -f#或许指定分支:origin master或类似的
  3. 从“好”客户端恢复任何剩余的工作,例如通过

    • git checkout master#从RESCUE_THIS

    • 切换回来
    • git merge --no-commit --ff RESCUE_THIS

    • git commit -am

    • git push#当你对结果真的很满意时

  4. 到那时你可以选择删除RESCUE_THIS分支。即使你这样做,它也不会在reflog过期之前消失。

    免责声明:以上所有内容都充斥着有关您的设置,分支历史记录,工作流程和特定故障情况的假设。请放心,他们是受过良好教育的猜测,大部分时间都与普通的做法相吻合。 睁大眼睛然后为自己考虑一下。 作为最后的手段,您可以在'好客户'上对git仓库进行物理备份以确保安全