Git Flow: 完成 feature 后是否需要手动从远程删除 feature 分支?

10

我是GITGIT-Flow的新手。[在我的python-django项目中]

我做了什么:

git flow feature start new_feature
# perform some commits on the feature/new_feature branch

git push origin feature/new_feature

git flow feature finish new_feature
# I suppose that merges feature/new_feature to develop and deletes feature/new_feature

git push origin develop # Pushes the new changes to remote

问题:

  • 在我的本地机器上,feature/new_feature 分支似乎已经被删除了。
  • 但是在 github [ 我的远程仓库名称为 origin ] 上,我可以看到 feature/new_feature 分支。
  • 我感到困惑,因为它不应该显示已删除的分支。
  • 我查找了解决方案 - 但它们说你应该手动在远程上删除它们,这似乎不适用于 git flow 的抽象概念。

那么,在使用 git-flow 时,你们是否必须每次都要从所有远程仓库中删除所有特性分支吗?

我做错了什么吗?


你有没有在中间进行过推送?除非该分支不会出现在远程。 - CharlesB
我在完成功能后进行了推送,我想如果我在本地 git 上删除它并推送,它也应该删除远程分支。 为什么即使推送后 git 仓库仍然不同步? - Yugal Jindle
1个回答

6
如果你曾经使用git push origin(本地已经检出feature),那么当前默认的推送策略是matching。(具体见git config手册页
意思是:

matching - 推送双方都有的同名分支。

但是:

这目前是默认值,但是 Git 2.0将默认改为simple.

upstream - 推送当前分支到它的上游分支。
这样,git push会更新与git pull合并的相同远程参考,使得push和pull成为对称操作。

(由于feature在GitHub上最初没有上游分支,因此不会被推送。)
(这种策略变化已经在过去几个月中在讨论中了。)
因此,暂时来说,如果你已经将你的feature分支推送到GitHub,并且在本地将其与develop合并后再推送develop,则需要从GitHub删除你的feature分支。
git push origin :feature

只有在整个过程中没有指定“fetch”标志时,git flow 才不会删除功能分支。详见源代码
# delete branch
if flag fetch; then
  git push "$ORIGIN" ":refs/heads/$BRANCH"
fi

这意味着你应该做了a。
git flow feature finish -F new_feature

这个想法是先获取new_feature在GitHub上的最新版本,确保没有其他贡献者添加了新的修改,然后再删除它。


先生,请查看问题的编辑。我错过了一些信息。 - Yugal Jindle
@YugalJindle 我刚刚添加了对git flow源代码的引用。 - VonC
@YugalJindle,你最后的推送只涉及到develop分支,而不是new_feature分支。如果git flow finish没有删除远程的new_feature分支,那么你的推送也不会改变它。 - VonC
@YugalJindle 我在源代码中看到,只有在定义了'fetch'标志时才会删除远程分支。这仅在执行git flow finish -F ...命令时发生(没有-F,没有fetch选项,也不会删除远程分支)。 - VonC
@YugalJindle 我刚刚编辑了我的答案。删除将反映在 git flow finish-F 选项中。现在,我建议手动修复(使用 git push :new_feature)。 - VonC
显示剩余2条评论

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