我们的 git 项目有问题:
- 错误的更改被推送到远程存储库
- 一台机器没有
pull
-ed 错误的更改,但有未提交的本地更改
我们希望从远程存储库中删除不好的更改,然后推送好的更改。
我们对 git 不是很有经验,并且害怕把它搞砸并失去未提交的、好的更改。我们不确定我们是否需要使用git revert
或git rebase
(或其他东西),以及来自哪台计算机(即来自没有良好变化的计算机?)。
我们的 git 项目有问题:
pull
-ed 错误的更改,但有未提交的本地更改我们希望从远程存储库中删除不好的更改,然后推送好的更改。
我们对 git 不是很有经验,并且害怕把它搞砸并失去未提交的、好的更改。我们不确定我们是否需要使用git revert
或git rebase
(或其他东西),以及来自哪台计算机(即来自没有良好变化的计算机?)。
首先:不要惊慌
这是一个修订控制系统。它存在,因此您不能轻易丢失信息。
您始终可以先保存工作:
git checkout -b RESCUE_THIS
git add .
git commit -am 'Do not loose this commit!'
并从那里拿走。
我建议:
还原错误的提交
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
。您可以还原多个提交。按时间倒序恢复它们。每次还原都会导致一个新的提交“取消”该提交的机会。
如果您发现自己要还原大量提交,则可能要改用 rebase。
强制将固定分支推送到中央仓库
origin master
或类似的从“好”客户端恢复任何剩余的工作,例如通过
git checkout master # 从 RESCUE_THIS 切换回来
git merge --no-commit --ff RESCUE_THIS
git 提交 -am
git push # 当你对结果真正满意时
到那时,您可以选择删除 RESCUE_THIS 分支。即使你这样做了,它也不会真正消失,直到 reflog(s) 过期。
免责声明:以上所有内容都充满了关于您的设置、分支历史、工作流程和特定故障场景的假设。请放心,它们是有根据的猜测,并且大部分时间都与惯例一致。不过,请睁大眼睛自己考虑一下。作为最后的手段,您可以在“好客户端”上对 git 存储库进行物理备份以确保安全