所以目前我在一个功能分支上(假设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
提交
有没有更好的方法可以做到这一点?
我注意到两件事:
- 您似乎认为
F1
只是您添加到分支的那些提交 - 因此,您试图通过主动阻止您未为该功能创建的任何代码成为
F1
分支的一部分来保持F1
分支"干净">
这造成困难的原因是你实际上在某种程度上反对 git 模型和 git flow 的工作方式。
为了解决第一个问题,分支(在 git 的大脑中(只是一个指向提交的标签,该分支包含该提交、其父项及其父项的父项等,一直追溯到初始提交。所以你的分支不是"我的代码",而是"项目历史,加上我的代码"。
使用 git flow 时,开发成为开发团队事实上的主分支。所以从本质上讲,一旦某些东西被合并到开发中,它就是项目的"官方"代码,即使它还没有被发布。
因此,如果F2
F3
和F7
都合并到develop
中,那么仅使用F2
进行测试F1
将永远无法让您全面了解代码将如何集成到主行代码中。
为了继续我们的推理,在您的情况下,您的分支包含"项目历史记录,加上我的代码",而不是包含"项目历史记录的一些过时版本,加上我的代码"。用一个有点缺陷的类比,你正在为2018年的野马设计一个汽车罩,方法是将2018年的挡泥板固定在1977年的野马上,并希望得到最好的结果。
防止功能过时的建议机制是定期将开发合并到功能分支中,或者将功能分支重新定位到新的开发负责人上(具体取决于您是否共享了代码和团队的工作流首选项(。功能分支的开发人员始终负责解决冲突并确保已合并到开发的功能的完整性。
补遗
正如您所说,保持分支机构清洁是团队的要求,变基是您最好的新朋友。
$ git checkout F1
$ git fetch
$ git rebase origin/develop
这将满足团队的要求,从历史记录角度将提交保持在一起,分支"干净",同时允许您针对创建分支后添加的开发的所有代码进行测试。所有这些都没有舞蹈,也不需要把事情滚回来。