什么时候删除Git中的分支?

Ant*_*ton 269 git version-control github git-gui git-branch

假设我们有一个稳定的应用程序.

明天,有人会报告我们决定立即修补的大错误.因此,我们为"master"创建了一个针对该修补程序的分支,我们将其命名为"2011_Hotfix",然后我们将其推送到所有开发人员可以协作修复它.

我们修复了这个bug,并将"2011_Hotfix"合并到"master"以及当前的开发分支中.推"主人".

我们现在用"2011_Hotfix"做什么?它应该只是作为一个分支永远坐在那里直到时间结束,还是我们现在应该删除它,因为它已经达到了它的目的?将分支放在各处都是不洁净似乎是不洁净的,因为分支列表可能会变得很长,其中大部分都不再需要了.

如果它应该被删除,它的历史会发生什么?即使实际的分支不再可用,这是否会得到维护?另外,我如何删除远程分支?

Art*_*ct2 173

您可以安全地删除分支git branch -d yourbranch.如果它包含未合并的更改(即,您将通过删除分支丢失提交),git将告诉您并且不会删除它.

因此,删除合并的分支很便宜,不会让您丢失任何历史记录.

要删除远程分支,请使用git push origin :mybranch,假设您的远程名称是origin,并且您想要删除的远程分支名为mybranch.

  • @MatrixFrog在git方面保持便宜,但是人力成本会变得昂贵.我刚刚进入了一个有大约40个分支的项目,所有分支都有数字分支名称.我不知道什么是什么,几乎每一个分支都是陈旧的.搜索这些分支并弄清楚什么是累人需要时间的开销.所以是的,从技术上说它便宜,但实际上并非如此.我喜欢保持我的git repo ship shape.如果它不在活动开发中并且已合并,请将其删除.但那只是我的MO而我尊重其他人可能做些不同的事情. (45认同)
  • "删除一个合并的分支很便宜",但保留它也是如此.如果你保留它,就git使用的时间或空间没有显着的性能损失.也就是说,我会删除分支,因为所有提交已经存在于`master`的历史中,所以它确实使事情变得更加清晰. (29认同)
  • 我想要删除分支的一个原因是:我们在分支中做了很多更改(实际上,所有更改),所以最终在使用命令'git branch'时会得到一个很长的列表.对于概述,我想缩短该列表.所以旧的分支将被删除.Reale版本已被标记,因此对我来说不是这样的. (17认同)
  • 虽然我同意删除已经合并的分支,但如果要查看尚未合并到当前分支的分支列表,您可以使用:git branch --no-merged (7认同)

Ada*_*ruk 49

您需要做的是标记您发布的任何内容.在积极开发时保持分支.

删除旧分支

git branch -d branch_name
Run Code Online (Sandbox Code Playgroud)

用服务器从服务器删除它们

git push origin --delete branch_name
Run Code Online (Sandbox Code Playgroud)

或旧的语法

git push origin :branch_name
Run Code Online (Sandbox Code Playgroud)

其内容为"在原点处没有任何内容".

也就是说,只要DAG(有向无环图)可以指向它,提交就会出现在历史中.

谷歌"git-flow",可以提供更多关于发布管理,分支和标记的见解.


che*_*rbr 30

由于问题有"github"标签,我还要添加这个:特别是在Github中,如果你拉取请求分支并且它被合并(通过UI或合并拉取请求的分支),你就不会即使您删除了分支,也会丢失拉取请求数据(包括注释).

这样做的结果是:如果您将拉取请求作为工作流程的一部分(与代码审查完美融合),您可以在合并后立即删除分支.这是非常普遍的,最近Github添加了一个(甜蜜的)功能,在合并拉取请求后立即弹出"删除分支"按钮.

但值得注意的是,每个小组都应采用最适合的工作流程(并且可能会或可能不会导致删除此类分支).例如,我的当前工作团队在拉动请求合并后立即修剪所有非主要或部署相关的分支(例如,生产,登台等),并且我们仍然完全跟踪相关提交是如何形成的每种产品的每次增量改进.

当然,没有历史记录管理(拉取请求或其他方式)取代版本的正确标记(您最好使用部署/打包版本的相同工具/脚本自动化),因此您可以随时快速切换到您的用户碰巧的任何内容在特定的时刻.标记也是解决原始问题的关键:如果你确定任何分支合并到"工作"分支可以而且应该被删除,并且任何合并到版本标签,"生产"等的分支都不应该,你将永远拥有这些修补程序,直到它们集成到未来的版本中.

  • 感谢您解释为什么Github向我展示了"删除分支"按钮. (2认同)

Mar*_*rra 7

我想补充一点,删除分支的缺点是你将破坏GitHub上那些分支的任何超链接(这个问题被标记为github).你会收到404 Not Found这些链接的错误.这就是我在GitHub上删除分支后将链接更改为指向提交或标记的原因.

因为某些链接无法更改,例如在电子邮件中,我现在完全避免超链接到GitHub分支,并从第一天开始链接到提交或标记.

我更喜欢在合并后删除分支.这可以防止存储库中一长串分支的视觉混乱.这些分支也会传播到所有存储库的分支.

首先,我删除我的本地分支.这可以防止以后意外推动它.

git branch -d branchName
Run Code Online (Sandbox Code Playgroud)

然后我删除了远程跟踪分支

git branch -dr remoteName\branchName
Run Code Online (Sandbox Code Playgroud)

然后我删除了GitHub上的分支.我使用Web界面,但下面是等效的命令.

git push remoteName :branchName
Run Code Online (Sandbox Code Playgroud)

即使分支从未合并,通常我仍然希望为后代保留提交.但是我还是想删除分支.为了传播提交并防止它们被垃圾收集器吃掉,我创建了一个带注释的标记,指向与已删除分支相同的提交.

git tag -a tagName commitOrBranchName
Run Code Online (Sandbox Code Playgroud)

然后我将标签推送到github

git push remoteName tagName
Run Code Online (Sandbox Code Playgroud)