为什么“git flow feature pull”不跟踪?

21
假设我使用 git flow feature start FEATURENAME 创建了一个新的功能,然后使用 git flow feature publish FEATURENAME 发布它。现在我的同事想要和我一起协作开发这个功能,所以他执行了 git flow feature pull FEATURENAME。 这将在他本地的仓库中创建一个新分支,基于远程仓库中的功能分支。但是,这不会自动设置他的本地功能分支跟踪远程功能分支,因此他现在必须手动跟踪此分支。
为什么需要这个额外的步骤?为什么不让feature pull 命令也设置跟踪呢? git flow feature pullgit flow feature track 工作流有什么区别?在什么情况下会使用其中之一?

如果你的同事在“feature pull”之前执行了“git pull”,那么情况会变得更加混乱。 - dashesy
我想使用git-flow,但我还需要解决如何进行特性协作的问题,因此我将为此设置赏金,希望能得到更好的想法。 - dashesy
2个回答

19
听起来你正在使用“git flow feature pull”,而应该使用“git flow feature track”,因为它创建了一个本地分支以跟踪远程分支。
我真的想不出为什么我会使用“git flow feature pull”。它创建了一个没有设置跟踪的本地分支,我不知道这有什么用!它的命名也很糟糕,因为拉取应该涉及合并,但这并没有。

3
使用 git flow feature [pull, track, checkout] 命令会让事情变得相当混乱。 - Drake Guan
当你已经在跟踪一个分支并且只想要获取和合并时,{{pull}} 不是被使用吗? - acme

13

这篇答案brainimus撰写,展示了特性分支的协作方面,使用了GitHub拉取请求功能来促进代码审查和讨论:

  1. 创建一个特性分支:git flow feature start module_1
  2. 代码更新在特性分支上
  3. 提交更改时,将其推送到GitHub(如果愿意,也可以在最后一次提交时进行)
  4. 完成特性后,在GitHub中打开一个拉取请求,比较develop和特性分支module_1
  5. 团队审核拉取请求并发表评论
  6. 从拉取请求中获取到的任何更改都应用于特性分支
  7. 一旦特性分支合并所有更改,即可完成该特性分支:git flow feature finish module_1
  8. develop分支推送到GitHub(当此操作发生时,GitHub会自动标记拉取请求为关闭/合并状态)

然而,这还需要解决关闭该分支的问题:

运行git flow feature finish module_1的人将享有其本地特性分支被删除的便利,但是如果其他任何人检出了该分支,则必须手动进行此操作

我推荐使用git fetch --prune特别是自Git 1.8.5以来,您可以在配置中设置"prune"步骤:简单的git fetch将删除您在服务器端(由其他人运行git flow feature finish)上已删除的特性分支。


如果使用AVH版本gitflow feature track,则只需检出并跟踪分支,即确保本地分支成为本地跟踪分支,并与其相关联一个 上游分支(一个远程跟踪分支)。也就是说,它设置了branch.<name>.remotebranch.<name>.merge

如果您执行了git flow feature pull(为了创建一个新的本地特性分支),但实际上需要执行git flow feature track,那么您只需使现有分支跟踪上游分支即可:

git branch -u origin/feature

一般而言:

  • 您可以使用 git flow feature track 命令开始新的功能,并创建特性分支,
  • 然后使用 git flow feature pull 命令将本地特性分支保持最新,
  • 您可以使用 git flow feature checkout 命令在不同的特性分支之间切换。

正如在"入门 - Git-Flow"中所提到的:

git flow feature pull

当有多人共同开发一个功能时,这个操作会被执行。
如果你想在拉取远程功能分支时使用此命令,请按照以下步骤进行:

git flow feature pull [alias] [featureName]

通过使用此命令,您将获取由团队成员推送的源代码,并且他们的更改将自动合并到您的本地分支中。
如果存在冲突,您将是幸运或不幸的一位来解决这些冲突。


还有什么建议可以使用官方的git-flow,或者AVH版本吗?最近我在git pull后混淆了功能分支的分歧,并希望为我们的团队制定一些程序。 - dashesy
@dashesy 我详细说明了 gitflow feature branch [pull, track, checkout] 之间的区别。 - VonC
1
@VonC 这并没有真正回答为什么有人会想要 pull 而不是 track 的问题(通过经验,我已经得出结论,没有真正的理由去做 pull)。你的回答第一部分根本与主题无关。至于第二部分 - 没有 gitflow feature push 命令。 - OpherV
1
@OpherV 抱歉打错字了:我是指拉取而不是推送。一旦你跟踪了,你可以使用 gitflow feature pull 命令来保持本地分支的最新状态。我确实参考了 AVH 的那个。 - VonC
1
@krystanhonour https://github.com/nvie/gitflow/pull/419/files => https://github.com/petervanderdoes/gitflow - VonC
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接