使用git管理本地功能分支的最佳方法?
我正在研究使用git进行分支管理的一些更精细的方面,并基于本文的一些决策: 现在我们这里有一个稍微简单的场景,远程在origin上我们有使用git管理本地功能分支的最佳方法?,git,branching-and-merging,feature-branch,Git,Branching And Merging,Feature Branch,我正在研究使用git进行分支管理的一些更精细的方面,并基于本文的一些决策: 现在我们这里有一个稍微简单的场景,远程在origin上我们有master和development\u branch。就所有开发人员而言,development\u branch是克隆的主要场所,只有当我们有一个稳定的版本时,我们才能从开发合并到master 考虑到这一点,我们在每一个sprint阶段都有大量的故事需要完成,因此我们目前要做的是克隆开发分支,然后为我们正在开发的故事/功能创建一个新分支,例如产品描述功能。
master
和development\u branch
。就所有开发人员而言,development\u branch
是克隆的主要场所,只有当我们有一个稳定的版本时,我们才能从开发合并到master
考虑到这一点,我们在每一个sprint阶段都有大量的故事需要完成,因此我们目前要做的是克隆开发分支
,然后为我们正在开发的故事/功能创建一个新分支,例如产品描述功能
。这个本地分支随后被处理,因此如果我们需要执行另一个任务或进行某种修复,我们将有干净的development\u分支
返回并从中分支
现在,问题围绕着以这种方式工作的过程而来,目前安全选项似乎是以下过程:
- 克隆
development\u分支机构
- 为任务创建新分支(在本例中,我们称之为
)feature\u a
- 提交到
分支,直到任务完成feature\u a
- 切换到本地
development\u分行
- 从原点向下拉任何新的更改(通常是经常发生的事情)
- 将
的更改合并到功能\u a
开发\u分支机构
- 将
本地推送到源站development\u branch
- 为下一个任务创建新分支
- 克隆
development\u分支机构
- 为任务创建新分支(在本例中,我们称之为
)feature\b
- 提交到
分支功能\u b
- 你意识到自己是一个拦截器,因此必须进行最新的更改
- 切换到
development\u分支机构
- 将
development\u分支机构
origin拉入本地
- 切换到
功能\u b
- 从
local合并到development\u分支机构
feature\u b
- 继续工作直到完成
开发分支
,然后切换回并合并到我的本地功能分支。那么,我是不是在这里过于谨慎了,应该从开发分支机构
开始,进入本地功能分支机构
呢
这似乎是可以做的,因为我所做的只是将更改直接带到我的本地功能分支中,而不更新我的本地development\u分支
,然后如果我需要推动更改,我会再次切换、拉动、合并、推动
那么有人能确认这是否是一个好的做法吗
同样,由于这些特性分支只存在于每台开发人员的机器上,所以在没有太多问题的情况下,如果有人在做一半的任务,然后有人需要处理它,会发生什么情况?您可以将该分支推到原点,让他们将其取下,然后再进行处理,但这将需要进一步清理,因此我认为没有很好的方法来解决此问题,但我想听听其他人如何解决此问题,而不会远程创建过时功能分支的荒地
还有几件事要提,我们目前只是ffwd合并,所以尽管在引用的原始文章中没有提到ffwd合并,但我看不出在不创建大量远程分支的情况下如何做到这一点。我使用的是Tortoise GIT而不是命令行,但是这不会真正改变任何事情。如果您想从另一个分支获得最新更新,可以跳过两个分支开关
git fetch
git merge origin/development_branch
至于你关于工作流程的问题,这完全是一个政策问题。我的工作地点使用项目分支,我们只是自己承担责任,明确规定它们的寿命。我们知道树枝何时生,何时死。这是使用-d
标志删除分支的好处
git branch -d feature_branch
通过这样做(而不是使用
-D
),您可以确保分支已合并回主线。否则它会阻止你。因此,您可以非常自由地使用这个delete命令。对我来说,使用GIT这样的分布式版本控制系统的主要原因之一是避免进入分支/合并地狱。就个人而言,听起来你的团队在做很多分支的工作,比如反对过早地、经常地向主线承诺。当然,在将更改推送到中央repo之前,我们还采用了持续部署和代码审查。git中的分支只是引用提交的轻量级指针。尽管通过将功能分支放在远程repo上,最终可能会得到很多功能分支,但这不会增加任何显著的开销。在特性合并到您的开发分支
后,您确实可以删除并摆脱特性分支。另一种可接受的做法是,在同步时,使用重基在远程更改的基础上添加(未刷新的本地)更改,然后将新的重基更改推回,以避免在历史记录中出现额外的合并,并具有更线性的更改。@mike brant你是对的,我们迁移到git的原因之一是为了消除非分布式VCS的合并和分支噩梦。然而,随着分支和合并变得越来越容易,您就更容易更好地利用分支和合并。我几乎同意文章作者所说的一切,用他的方式(无论是对是错),这就是为什么我提倡用这种方式工作。我们实际上不需要代码审查,因为我们有一个环境构建脚本