git - 如何在另一个功能中测试 git flow 功能
问题描述
所以目前我在一个特性分支上(比如说f1
),这个develop
分支在f1
.
另一位开发人员正在开发一项新功能f2
并提交到该develop
分支。现在该develop
分支具有该功能f2
以及其他未在f1
.
现在,我只想测试该功能f2
,而不测试所有其他已启用develop
但不在我的分支中的功能f1
。我怎样才能做到这一点?
重要提示:完成测试后,我想f2
离开我的f1
分支。
现在我正在通过以下方式执行此操作:
- 存储我所有未更改的更改(
git stash
),因为我不确定我是否要提交它们 f2
樱桃选择(git cherry-pick f2
) 中的提交- 卸载 (
git stash pop
) - 测试
- 存储我所有未更改的更改(
git stash
) - 恢复精选的提交
f1
- unstash 未提交的更改
f1
如果所有更改都正常,则提交
有一个更好的方法吗?
解决方案
我注意到两件事:
- 您似乎
F1
只是认为您已添加到分支中的那些提交 - 因此,您正试图
F1
通过积极阻止您没有为该功能创建的任何代码成为分支的一部分来保持分支“干净F1
”
这造成困难的原因是您实际上在某种程度上针对 git 模型和 git flow 的工作方式。
为了解决第一个问题,分支(在 git 的大脑中)只是一个指向提交的标签,并且分支包含该提交、其父级及其父级的父级等。到初始提交。所以你的分支不是“我的代码”而是“项目历史,加上我的代码”。
当使用 git flow 时,develop 成为开发团队事实上的 master 分支。所以本质上,一旦某些东西被合并到开发中,它就是项目的“官方”代码,即使它还没有发布。
因此,如果F2
F3
并F7
已全部合并到中,仅develop
测试将永远无法让您全面了解您的代码将如何集成到主行代码中。F1
F2
为了继续我们的推理,在您的情况下,您的分支不是包含“项目历史记录,加上我的代码”,而是包含“项目历史记录的一些过时版本,加上我的代码”。用一个有缺陷的类比,你正在为 2018 年的野马设计一个车罩,将 2018 年的挡泥板固定在 1977 年的野马上,并希望获得最好的结果。
防止您的功能过时的推荐机制是定期将开发合并到您的功能分支中,或者将您的功能分支重新定位到新的开发负责人(取决于您是否共享了您的代码和工作流偏好你的团队)。功能分支的开发人员始终负责解决冲突并确保已合并以进行开发的功能的完整性。
附录
正如您所说,保持分支清洁是团队的要求,rebase 是您最好的新朋友。
$ git checkout F1
$ git fetch
$ git rebase origin/develop
这将满足团队的要求,即从历史的角度保持您的提交和分支“干净”,同时允许您针对创建分支后添加到开发的所有代码进行测试。所有这些都没有舞蹈,也不需要回滚。
推荐阅读
- python - sklearn n_jobs!=1 不在 Windows 上并行化
- jquery - jQuery Validation Set Defaults 不适用于 laravel
- plantuml - 在哪里可以找到旧版本的 PlantUML 文档?
- javascript - 组合来自两个不同数组的两个对象
- java - 通过 Yaml 配置 H2 数据库 - Spring Boot
- flutter - 如何制作 ListViewBuilder 和其他小部件的 ScrollView?
- python - 使用 Numba 时如何指定“字符串”数据类型?
- apache-spark - 这个 spark 程序将如何执行?
- excel - 当单元格中的公式结果发生变化时,宏不会运行。为什么?
- android - 运行 android 时 Moengage 错误的 React-native 设置:包 MoEngage 不存在