镜像(X)存储库的主分支与镜像存储库(Y)分离,并且Gitlab无法将镜像与最新更新同步

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

我的问题:

在 Gitlab 中,我有一个存储库(称为 X),其主分支镜像公共存储库(称为 Y)的“主”分支。因此,Gitlab 会定期同步到 X(镜像)的主分支,并将最新更改合并到 Y(镜像)的主分支上,直到昨晚我不小心将一些更改合并到 X 的主分支上。现在,在 Gitlab 中,在 X 的主分支旁边,我有一条消息说:“main default> protected 与上游分支

如果我将鼠标悬停在与上游分歧上,我会看到以下消息:“该分支无法自动更新,因为它已与其上游对应部分分歧。 要放弃本地更改并用上游版本覆盖分支,请在此处删除它并选择上面的“立即更新”。”,尽管如此,此消息对我来说似乎非常模糊,尤其是“在此处删除它并选择上面的“立即更新” .”.

我认为我无法删除主分支,而且现在我认为我不想这样做。

因此,与 Y 主分支的周期/强制同步现在失败了。

即使恢复了我不小心合并到X主分支上的提交,它也没有解决问题,因为我仍然无法与Y同步。

我的问题:

有什么方法可以达到这样的状态:我可以从 Y 的主分支再次进行周期性同步,并使 X 的主分支再次与 Y 同步。

我尝试了

git reset --hard origin/main
并收到以下消息:

git reset --hard origin/main

HEAD is now at 4e4b83e Merge branch 'revert-d3a10f32' into 'main'.

显然,Gitlab 所建议的可能是不可能的,因为 X 的

main
分支是默认分支,我认为无法删除。

git gitlab
1个回答
0
投票

如果两个远程存储库 Y 和 X 之间的同步因 X 与 Y 发生分歧而失败,则当您在本地存储库上执行 a

git reset --hard origin/main
时,您不会将本地分支
main
重置为分歧之前的提交,您只需将本地
main
分支重置为 X 的
main
分支。您的本地和远程存储库仍然与 Y 不同。

如果要恢复同步,X 的

main
分支不应比 Y 的
main
分支包含任何其他更改,因为 GitLab 只是在两者之间执行快进。您需要将 X 带到分歧之前的点。为此,请找到 X 和 Y 的
main
分支之间的最后一个共同祖先。因此,添加 Y 作为第二个遥控器,并获取其
main
分支。此时,在
main
origin2/main
之间执行 git-merge 并重置为该提交。最后,强制推送到远程存储库 X,以便 X 的
main
回到 Y 的
main
历史记录所包含的点。

# add Y as the second remote
git remote add origin2 Y

# fetch main from Y
git fetch origin2 main

# find the most recent common ancestor between your local main (which corresponds to X) and Y's main
git merge-base main origin2/main

# copy the SHA1 returned from git merge-base

# reset to most recent common ancestor
git reset --HARD <SHA>

# force-push to overwrite X's `main` with your local
git push --force origin main
© www.soinside.com 2019 - 2024. All rights reserved.