因此,目前我在功能分支(例如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
的精心挑选的提交f1
上提交有更好的方法吗?
答案 0 :(得分:1)
我注意到两件事:
F1
只是您已添加到分支中的那些提交F1
分支的一部分,来保持F1
分支“干净” 造成麻烦的原因是您实际上在某种程度上针对git模型以及git flow的预期工作方式。
要解决第一个问题,分支(在git的大脑中)只是指向提交的标签,并且该分支包含该提交,其父级和其父级的父级等。所有返回初始提交的方式。因此,您的分支不是“我的代码”,而是“项目历史记录加上我的代码”。
使用git flow时,develop成为开发团队的defacto主分支。因此,从本质上讲,一旦某些内容被合并到开发中,即使它尚未发布,也就是该项目的“正式”代码。
因此,如果F2
F3
和F7
已全部合并到develop
中,则仅使用F1
来测试F2
将永远无法为您提供有关如何将代码集成到主代码中的完整说明。
根据您的情况,继续我们的推理,而不是您的分支包含“项目历史记录,加上我的代码”,而是包含“某些版本的项目历史记录,加上我的代码”。要使用有点瑕疵的类比,您正在通过将2018年挡泥板用螺栓固定在1977年Mustang上并希望达到最佳效果,来设计2018 Mustang的车罩。
建议的防止功能过时的机制是定期将开发合并到功能分支中,或将功能分支重新部署到新的开发负责人(取决于您是否共享了代码和您团队的工作流程偏好设置)。功能分支的开发人员始终负责解决冲突,并确保已经合并以开发的功能的完整性。
附录
正如您所说的那样,保持分支机构的清洁是团队的要求,变基是您的新好朋友。
$ git checkout F1
$ git fetch
$ git rebase origin/develop
这将满足团队的要求,即从历史角度将提交保持在一起,并使分支“干净”,同时允许您在创建分支后针对添加的所有代码进行测试。所有人都不需要跳舞,也不需要回滚。