问题的简短描述
在一个新的开发人员组加入我们的项目后,他们初始化了一个新的 repo 并将master 的快照复制(未合并!)到新创建的 repo 中。因此,在他们的分支中,旧文件丢失了master
. 之后,他们开始了典型的 git 工作流程,包括提交、分支、合并来自 master 的更新等。现在的问题是将他们的代码合并到master
或dev
排除前两次提交并保留我们的历史记录(并且保留他们的历史记录也很好)。
详细问题描述
所以我们有分支master
:dev
和funny_developers
。
这是我们的分支结构:
I---A---B---C---D---Y...X <--(master/dev)
\!\ \
I'---IABC--G--DY..Z <--(funny_developers flow)
I...C...X
- 是我们的主要开发流程(master
现在dev
分支已同步)与提交历史。此流没有从funny_developers
分支导入
I'
- 是一个提交,其中funny_developers
重新启动了一个空的新仓库(似乎他们做了git-init
?)。
IABC
- 非常脏的提交,将提交时funny_developers
存在的所有文件复制为新文件。不合并 from ,只是重新创建项目的文件结构!所以他们放弃了在分支演化过程中所做的所有更改历史)。master
C
C
master
G..Z
- 是他们进行大量更改的大量提交。在这个流程中,他们还多次合并了来自 master 的更新,创建了自己的分支,将它们合并到funny_developers
(有时通过冲突解决)等等。
所以现在我在合并G..Z
到master
保留我们最初的提交历史和它们(排除I'
和IABC
提交)时遇到了问题。
问题
您能否建议我最好的方法(如果存在)来获取他们的提交master
并保留提交历史记录,不包括前两个?
我一次拯救女王和王国的实验
我试过了git cherry-pick G..Z
。但他们在并行分支中进行编码,并且正在将大量合并到funny_developers
. 他们解决了很多自己的分支冲突。如果我决定使用这种方法,我似乎需要很多时间来再次解决它们。
我试过git rebase --onto master IABC Z
了,期待它能够将所有的分支桶移动G..Z
到master
. 但是我遇到了一堆与很久以前的提交相关的冲突(甚至在'funny_developers'开始之前)。而且我无法理解它们与实际 rebase 的关系(可能是因为他们已经重新初始化了 repo ......)。
无论如何,如果我找不到保留“两个历史”的解决方案,我倾向于为他们的所有工作制作差异,并将其作为单个补丁提交提供给master
.