【发布时间】:2016-01-21 08:00:28
【问题描述】:
我们在小型开发团队中使用feature branch workflow。我们目前正在开发一个大型项目,因此其中一位开发人员已将他们的功能分支推送到 origin,其他人都可以在其中签出自己的本地副本。
[leonard@dev public]$ git branch -avv
master 9d53b40 [origin/master] Fix reviews
* responsive 0c04643 [origin/responsive] Add media queries
remotes/origin/HEAD -> origin/master
remotes/origin/master 9d53b40 Fix reviews
remotes/origin/responsive 0c04643 Add media queries
在 master 上开发时,我们创建功能分支(即 master_hotfix),然后当我们准备好合并它时,我们首先将 master 重新设置为它,然后再这样做。这给了我们一个我们喜欢的很好的线性历史。我们认为这也是对我们的响应式项目执行此操作的最佳方式,因此我们将基于响应式分支创建一个新分支(即 responsive_some-feature)。同样的git pull、git rebase responsive responsive_some-feature也可以在这里使用。
但是对于我们是否应该(如果应该,在什么时候)将master 重新设置为responsive,我们有点困惑?在responsive 分支被推送到origin 之前,将master 重新设置为基础很简单,但是将master 重新设置为responsive 然后将responsive 重新设置为responsive_some-feature 对吗?当我做时,我看到(以及一些冲突):
# On branch responsive
# Your branch and 'origin/responsive' have diverged,
# and have 112 and 109 different commit(s) each, respectively.
#
nothing to commit (working directory clean)
通常此时我会看到一个干净的工作目录,然后我可以在其中签出 master 并将我的功能分支合并到其中。唉,在此 rebase 之后,来自 master 的提交在那里,新的提交在 @ 987654339@ 正确地追随他们,但这是正确的方法吗?我应该如何继续,或者我应该使用不同的方法使responsive 与master 保持同步?
编辑:我制作了一个图表来更好地说明我的工作流程:
【问题讨论】:
-
如果
responsive是master的分支,那么你为什么要考虑在responsive上重新定位master?另外,如果你用图表代替文字,你的问题会更清楚。 -
我觉得您的问题不是关于变基,而是整理出该功能可能领先于功能功能的可能性,反之亦然。另外,稍微纠正一下你的术语:
merge my feature branch in.如果master的功能领先,你真的会快进master(从技术上讲,这是一个快进合并,但我不喜欢使用变基上下文中的“合并”一词)。 -
拥有线性历史很好,但是一旦您有多个开发人员在功能分支上工作并重新定位它们,您就进入了使用 Git 的“大手术”领域。您可能想问自己,为主要分支保留准确的历史记录(而不是线性历史记录)是否会更好地为您服务,并且只使用变基来保持这些主要分支的线性。当您使用准确的历史记录而不是虚构的线性历史记录时,Git 会更容易使用。同样,rebase 非常适合小更改,但对于大更改坚持合并,它更安全、更容易。
-
我还担心你说你正在将 master 重新定位到你的特性分支上......通常你会做相反的事情,你将你的特性分支重新定位到 master 上。我对你为什么要重新设置 master 感到困惑。
-
如果你能给我们看一张
masterfeaturefeature-feature的样图,也许我们可以给一些针对性的指导。正如@DietrichEpp 所提到的,关于如何变基似乎有点混乱,这本身可能就是你问题的实际来源。
标签: git git-branch git-rebase