如何关闭Git分支?

118

我开始使用Git + GitHub。

在我们的分布式团队中,每个成员都为其分配的每个问题/需求创建自己的分支。

  1. git branch Issue#1 <-- 创建此分支
  2. git checkout issue#1 <-- 切换到此分支

现在 编写代码提交(commit)编写代码提交(commit),等等...

然后 拉取请求(pull request)修复代码(code-fixup)提交(commit)编写代码提交(commit),等等。

最终,拉取请求(pull request)被接受了。

但是,现在怎么办?

在本地开发机上创建分支的人需要关闭分支吗?建议开发人员删除分支 ( ... -D ...),然后执行拉取/刷新主干,这样就可以获取所有他们的分支代码。


18
在 Git 中,分支只是针对特定提交的标签 - 因此,如果您不再需要它,只需删除该“分支”(即该提交上的“标签”)。在本地,只需运行 git branch Issue#1 -d,就完成了操作 - 没有代码丢失,只是从您的仓库中删除了一个标签。 - marc_s
1
@marc_s 我建议你把它做成一个答案 :) - KingCrunch
所以,@marc_s - 你是说一旦你完成了你的分支,而且这个分支已经被推送了,标准做法就是删除它?那合并呢? - Pure.Krome
@Pure.Krome 至少我认为,您所说的“拉取请求被接受”是指已经合并了。是的,当然要将更改集成到 masterdevelop 或其他开发分支中(合并、变基(带/不带压缩)等)。 - KingCrunch
当我说“合并请求已被接受”时,这实际上发生在其他地方(即,负责批准所有提交的代码的开发人员...)。我在想是否应该在我的本地开发机器上切换到主分支并进行合并。 - Pure.Krome
@Pure.Krome:是的,那可能是一个不错的方法。毕竟:如果你已经将你的更改推送到中央仓库并且拉取请求已被接受,接受者很可能已经将这些更改合并到中央仓库的某个分支中 - 所以下次当你从中央仓库拉取时,你会得到你的合并更改。 - marc_s
3个回答

194
我们要求开发人员在申请拉取请求时说明他们希望删除该分支。大多数情况下是这样的。但有时需要一个分支(例如,将更改复制到另一个发布分支)。
我的手指已经记住了我们的流程:
git checkout <feature-branch>
git pull
git checkout <release-branch>
git pull
git merge --no-ff <feature-branch>
git push
git tag -a branch-<feature-branch> -m "Merge <feature-branch> into <release-branch>"
git push --tags
git branch -d <feature-branch>
git push origin :<feature-branch>

分支是用于开发工作的。标签则是用于记录时间点。通过为每个分支合并打上标签,我们就可以在需要时重新创建该分支。分支标签已多次用于审核更改。


10
我们最近对我们的流程进行了更改。使用 git push --tags 命令会下载所有标签,这样会非常麻烦,因为它会干扰你本地的标签。相反,我们现在使用 git push origin branch-<feature-branch> 命令只推送一个标签。 - Bill Door
因此,最后一行,您需要记住使用功能分支的标签名称,我们之前设置为“branch-<feature-branch>”,而不仅仅是<feature-branch>。正确吗? - Premier Bromanov
@PremierBromanov 最后一行是用于删除远程分支的。为了记住标签,@BillDoor 使用了 git push --tags - Deivide
优秀的脚本!! - Kike Gamboa

42

完成代码后,先将分支合并到主分支,然后删除该分支。

git checkout master
git merge <branch-name>
git branch -d <branch-name>

这是在我的开发机上,对吧?主要接受任何新代码的人..他的机器在别处。 - Pure.Krome
2
如果有其他人正在进行合并操作,他通常会在一个单独的远程分支中拥有你的分支指针,例如sender/branch-name。在你执行完操作后,他需要使用git remote prune sender来清除它 - 虽然在大多数情况下,他不需要关心这个。 - jørgensen
1
除非你负责将分支集成到主树中,否则不应该合并自己的分支。如果你不是负责集成的人,并且你要求其他人进行集成,请使用新的远程提交更新你的主分支 - 它们应该包含你请求拉取的任何内容 - 然后删除你的分支。这样可以确保如果其他人更改了东西,你就不会遇到任何问题。 - ThiefMaster

41

是的,只需运行git push origin :branchname即可删除分支。如果后面需要解决新问题,请再从主分支创建一个新分支。

注:该段内容涉及git命令,建议在进行相关操作前充分了解其含义和影响。

3
这将删除远程分支,而不是本地分支。 - KingCrunch
6
我不知道为什么这个回答被评为-2,这是正确的答案。他们肯定有一个远程分支,否则他们怎么能对它发起 PR 呢? - Ana Betts
如果你这样做,然后执行 git pull,那么它不会删除你的本地分支,对吗?(编辑:我看到它明确说明除非你运行 git remote prune,否则不会删除。) - Tim Keating
1
分支历史记录会发生什么? - geoidesic

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