新开发人员小组加入我们的项目后,他们初始化了一个新的仓库,并将主人的快照复制(未合并!)快照到新创建的仓库中。所以在他们的分支旧文件中丢失了master
中存在的提交历史。之后他们开始了典型的git工作流程,包括comitting,分支,合并来自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
将提交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'开始之前)。我无法理解它们与实际的变化有什么关系(可能是因为它们重新启动了回购......)。
无论如何,如果我找不到保留“两个历史”的解决方案,我倾向于为他们的所有工作做出差异,并将其作为master
的单个补丁提交。