2

我们的 git 项目有问题:

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

我们希望从远程存储库中删除不好的更改,然后推送好的更改。

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

4

1 回答 1

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 togit log`

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

      注意找到要恢复的修订git log。您可以还原多个提交。按时间倒序恢复它们。每次还原都会导致一个新的提交“取消”该提交的机会。
      如果您发现自己要还原大量提交,则可能要改用 rebase。

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

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

    • git checkout master # 从 RESCUE_THIS 切换回来

    • git merge --no-commit --ff RESCUE_THIS

    • git 提交 -am

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

到那时,您可以选择删除 RESCUE_THIS 分支。即使你这样做了,它也不会真正消失,直到 reflog(s) 过期。

免责声明:以上所有内容都充满了关于您的设置、分支历史、工作流程和特定故障场景的假设。请放心,它们是有根据的猜测,并且大部分时间都与惯例一致。不过,请睁大眼睛自己考虑一下。作为最后的手段,您可以在“好客户端”上对 git 存储库进行物理备份以确保安全

于 2011-10-31T15:00:36.813 回答