git - git:从功能分支多次合并后创建一个干净的历史记录,该分支随后被重新设置
问题描述
假设我正在开发分支 B 中的某个功能。我的功能依赖于我的同事在分支 A 中开发的另一个功能。
我和我的同事密切合作,所以在开发过程中他会经常用我在 B 中需要的新东西来更新 A。我得到他的改变的方式就是与他的分支合并。所以我在 B 中所做的事情如下:
git checkout master
git checkout -b B
..
git commit Some work
..
git commit More work
..
git fetch origin
git merge origin/A
..
git commit Event more work
..
git fetch origin
git merge origin/A
..
git commit And even more work
..
git fetch origin
git merge origin/A
...
这很好用。问题是我们想把它变成 master 并拥有一个干净的历史。我们特别希望:
- 使用某种变基清理 A 的历史
- 使用某种变基清理 B 的历史
- 首先提交 A,然后提交 B 到 master,而不需要上面的所有额外合并。
我能想到的唯一方法是:
- 以通常的方式将 A 变基为 master
- Cherry 从 B 中挑选所有非合并提交到 master 上。
一个问题是我必须手动挑选非合并提交。
有没有更好的办法?
解决方案
好吧,您可以自动挑选樱桃,而不是手动挑选樱桃,即变基:
git rebase A B
git 会自动:
- 找出 A 和 B 之间的父提交
- 遍历 B 中的所有提交以应用于 A 之上
- 找出一些提交已经在
A
并且不需要再次应用。
但是,您可能会在此过程中遇到很多冲突。
我建议,如果合并时的干净历史记录向您导入,您将工作流程调整为 havegit rebase origin/A
而不是git merge origin/A
,这意味着您的历史记录将保持干净。您可能还想稍微了解一下 git rebase 工作流程。
推荐阅读
- asp.net - 调用 REST Web 服务后调用方法未获得返回值
- sql-server - 每个数据库的实际 CPU 使用率
- qt - 是否有一个类似 QML 网格的控件可以附加到 QAbstractTableModel,我热衷于使用模型中的列,而不是角色
- scala - 如何将元素添加到流中
- reactjs - 嵌套类的 MaterialUI 主题样式
- angular - Firebase:按键查询?
- python - 字典python上的智能循环
- wix - Wix 工具集 - 主要升级 - 希望在主要升级时保持某些文件完整而不删除它们
- xml - 使用 XSLT 将日期格式化为日历年的第一天
- failover - ActiveMQ Artemis 故障回复在 2 节点 HA 设置中杀死从属