Git 撤消强制推送到远程分支

问题描述 投票:0回答:1

我需要撤消对远程分支的强制推送,或者应用在从本地强制推送之前合并到远程分支的先前更改。

这是一个 release 分支。起源release合并了许多我不知道的修复,并且我没有获取到我的本地。当我将新更改从本地 release 分支推送到原点时,我强制推送了它们。现在原始发布分支没有任何合并到其中的修复。

我能够使用 git rebase <COMMIT ID> 对单个提交的

most
进行变基,但其中一些会返回错误
fatal: no such branch/commit '<COMMIT ID>'

我假设 git fetch 没有获取整个日志?为什么其中一些有效,而另一些则无效?它们都是相对较新的,在最近推送到存储库的约 20 次提交中。

git github rebase undo
1个回答
0
投票

简单的解决方案:让其他人来修复它

您团队中的其他人可能拥有包含所有旧更改的发布分支版本。让他们用力推它。


重新记录解决方案

查看远程发布分支的reflog。但是,您无法保证您的引用日志中的状态正确,因为您使用了

--force
(我不知道远程分支的状态,但无论如何都想覆盖它)而不是
--force-with-lease
(仅覆盖遥控器的状态(如果它处于我知道的状态)
如果您从未有过删除的版本,请在您知道它存在的电脑上尝试一下。


“再次合并”解决方案

请记住,即使其他开发人员在合并后删除了他们的分支,如果团队中的任何人使用

git pull
/
git fetch
而不使用
--prune
选项,那么他们的电脑上仍然会在本地拥有远程分支。


最终评论

--force

不要使用

--force
。正常推送唯一会失败(并且
--force
会成功)的情况是当您推送到的分支上有其他更改时。
它对于重写您自己拥有的分支的历史很有用。然而,如果您与其他人一起在分支上工作,它总是会引起问题。

我希望这些都会有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.