我需要撤消对远程分支的强制推送,或者应用在从本地强制推送之前合并到远程分支的先前更改。
这是一个 release 分支。起源release合并了许多我不知道的修复,并且我没有获取到我的本地。当我将新更改从本地 release 分支推送到原点时,我强制推送了它们。现在原始发布分支没有任何合并到其中的修复。
我能够使用 git rebase <COMMIT ID>
对单个提交的
most进行变基,但其中一些会返回错误
fatal: no such branch/commit '<COMMIT ID>'
。
我假设 git fetch 没有获取整个日志?为什么其中一些有效,而另一些则无效?它们都是相对较新的,在最近推送到存储库的约 20 次提交中。
简单的解决方案:让其他人来修复它
您团队中的其他人可能拥有包含所有旧更改的发布分支版本。让他们用力推它。
重新记录解决方案
查看远程发布分支的reflog。但是,您无法保证您的引用日志中的状态正确,因为您使用了
--force
(我不知道远程分支的状态,但无论如何都想覆盖它)而不是 --force-with-lease
(仅覆盖遥控器的状态(如果它处于我知道的状态)“再次合并”解决方案
请记住,即使其他开发人员在合并后删除了他们的分支,如果团队中的任何人使用
git pull
/git fetch
而不使用 --prune
选项,那么他们的电脑上仍然会在本地拥有远程分支。
最终评论
--force
不要使用
--force
。正常推送唯一会失败(并且 --force
会成功)的情况是当您推送到的分支上有其他更改时。我希望这些都会有帮助。