我正在将几个相关项目移入一个monorepo,以保留每个项目的历史。
每个有问题的项目都有自己的仓库。此外,每个项目的开发都严重依赖--no-ff
合并,以将主题分支重新集成到master分支中。
我已经尝试过shopsys/monorepo-tools,并成功地产生了具有联合历史的monorepo。
我还发现,在大多数情况下,主题分支都相当长,并且包含初始实施,复审修订以及有时master -> topic
合并的历史。自然地,该信息似乎无关紧要–只有将其变成master
的更改才是真正重要的。
因此,我一直在考虑重写这些项目的历史记录,然后再将它们全部合并到一个仓库中。我想从这种状态实现重写历史记录:
...
|
* Merge branch 'feature/XYZ'
|\
| * feature/XYZ#3 Review fixes part 2
| * feature/XYZ#2 Review fixes
| * feature/XYZ#1 Hack, hack, hack
|/
* Initial commit
进入此状态:
...
|
* squashed: feature/XYZ#1 + feature/XYZ#2 + feature/XYZ#3
|
* Initial commit
我想对历史上的每个合并重复一次。我认为我必须使用git filter-branch
,但是我还不能完全理解它的多种选择,因此,如果有人可以向正确的方向推我,我将非常感激。
答案 0 :(得分:2)
我将从做一个特定的分支开始做,以保留原始状态(以防万一:)) 然后使用git rebase:
# git checkout -b trying_jo_solution
# git rebase -i <Initial comit sha or tag>
将显示:
pick 11111 Initial commit
pick 22222 feature/XYZ#1 Hack, hack, hack
pick 33333 feature/XYZ#2 Review fixes
pick 44444 feature/XYZ#3 Review fixes part 2
pick 55555 Merge branch 'feature/XYZ'
更改为:
pick 11111 Initial commit
r 22222 feature/XYZ#1 Hack, hack, hack
f 33333 feature/XYZ#2 Review fixes
f 44444 feature/XYZ#3 Review fixes part 2
f 55555 Merge branch 'feature/XYZ'
那么您将有机会重新撰写评论(在22222上)
至:压扁:Feature / XYZ#1 + Feature / XYZ#2 + Feature / XYZ#3
完成!检查它看起来像您想要的水
然后您只需要更改分支主控位置
#git branch -f master
#git push -f origin master