从错误分支恢复合并后无法从另一个远程拉取

Posted

技术标签:

【中文标题】从错误分支恢复合并后无法从另一个远程拉取【英文标题】:can't pull from another remote after reverting merge from wrong branch 【发布时间】:2021-09-23 15:46:31 【问题描述】:

我不想重复,但我没有看到任何完全符合我情况的问题/答案。

所以我们的团队必须与另一个团队合作。我以为我应该将他们的功能分支合并到我们的发布分支中。事实证明这不是正确的。 我恢复了合并提交。 我发现当我尝试从他们希望我使用的其他分支中提取时,无法从他们的功能分支中添加在合并中的文件。 我恢复了revert。 然后我手动“放回”在我恢复并再次恢复的第一次合并提交中发生的所有更改。 现在我仍然无法从他们希望我从中拉出的分支中拉出。

此时最好使用哪种策略?

双方的许多分支都被其他团队成员使用,所以我的发布分支被“损坏”(其他团队无法添加他们的文件)是一个大问题。

【问题讨论】:

我认为一个带有简单 ascii 分支的小例子可以帮助我们理解发生了什么。 “合并中添加的文件无法添加回来”是什么意思? 以防万一:您必须合并的正确分支包括您之前合并/恢复的错误分支中的修订?如果是这种情况,git 不会喜欢它,解决这个问题可能会有点麻烦。您可能必须创建分支的单独克隆,以便 git 不会将其视为已合并的修订版......或者您可能必须重写您的分支,以便完全摆脱整个错误的合并。 @eftshift0 喜欢在我合并错误分支之前重置提交吗? 是的......重写历史总是一种资源......如果其他人已经在使用该分支,那只会是一种痛苦。但是,如果您决定使用git reset --hard,就好像它从来没有发生过一样。如果它是一个私有分支(例如它没有被推送,例如你是唯一一个在本地使用它的人),不要三思而后行重置它。 【参考方案1】:

如果我从问题和 cmets 中的跟进中正确理解,您合并了一个分支,将其还原,现在您想要合并一个不同的分支,其中包含一些作为错误分支的一部分还原的修订,对吗?

重写不是一条可行的路径,因为其他人已经在使用错误的合并/还原。

如果是这样的话,我认为让 git 允许你合并该分支的下一个最好的事情是重写正确分支的历史记录(私下),以便 git 真正 /em> 新版本。因此,在您的分支在错误合并之前 和您要合并的好分支之间找到最后一个共同祖先。这可以通过git merge-base revision-before-bad-merge the-right-branch 完成。我们称这个版本为X

git checkout X
git cherry-pick X..the-good-branch #I am assuming it's a straight line

现在,你有一个私有的 clone 右分支,它由完全未合并的 git 修订组成。如果您尝试将此修订版合并到目标分支中,应该没问题:

git checkout target-branch
git merge HEAD@1 -m "Merging a clone of branch whatever because I busted it merging the wrong branch before.... sorry"

Git 应该允许你这样做。作为警告:在本地执行此操作以查看结果。

【讨论】:

现在正在阅读这篇文章,但我只是添加了一个视觉效果,如果有帮助的话。 我已经更正了食谱。确保我的假设(前 2 段)是正确的,这样配方就适合您的情况。

以上是关于从错误分支恢复合并后无法从另一个远程拉取的主要内容,如果未能解决你的问题,请参考以下文章

如何从 GIT 恢复旧的拉取请求

完全恢复拉取请求

Gitlab 无法将恢复的分支与另一个分支合并

删除合并的分支给出“错误:分支 X 未完全合并......”

如何创建从一个分支的 Bitbucket 到 GitHub 中的主分支的合并拉取请求

git从主分支上拉取新分支以及提交代码合并到主分支