我有一个上游 git 存储库(远程),它有一个 master 和几个分支,但只有一个分支对手头的讨论很重要:
上游的:
x-------y--------> master
\
\
----z-----> develX
然后我在 x 处从上游克隆了我自己的仓库。
x--------y---------> master
\
\
-----z-------> develY
develY 是我的分支,拥有我自己的工作和来自 develX 的补丁 (z)。我的主人在时间上有些失落。它有来自上游 master 的补丁 (y) 和一些调整,试图让它与我的一些补丁一起工作,但它实际上是一个丢失的案例并且无法正常工作。
所以我决定让它与 develY 完全相同: $ git checkout develY $ git merge -s ours master $ git checkout master $ git merge develY $ git push
所以现在master和develY完全一样。但是,我真正想要的是将我的 master 与我的 develY 更改同步到上游 master(现在也在我的 master 中)。
我最初以为我要将上游 master 中的更改重新设置到我的 master 上,但是上游大约有 6000 次提交要重新设置,而且这不可能很好地工作。有几个问题似乎使这个案例比我最初想象的更复杂:
- develY(以及我合并和推送 master 之后的 master)有一些来自上游 develX 的补丁,这些补丁可能不存在于上游 master 中;
- 我的主人有一些来自上游主人的提交,这些提交由于合并 -s ours of develY 而被恢复;
- 由于上述几点,将
git merge-base master upstream/master
补丁 y 显示为最后一个共同祖先,但是此补丁实际上不在 master 中,因为它已通过合并恢复。
关于如何尽可能干净地让我的主服务器与上游/主服务器同步以及我的开发人员的更改有什么建议吗?