如何处理实验性非合并的git分支?

27
当前在使用git分支的最佳实践中,如果创建了一个分支来测试解决问题的方案,但由于审核过程显示其错误或有更好的解决方案而尚未合并,应该怎么做呢?
比如说,项目fizzbuzz有一个bug报告,报告称空字段会导致崩溃。
我创建了一个新的分支"handle-empty-fields",并对该分支进行了两次提交,"解决"了这个问题。 然后我将这个分支提交给fizzbuzz项目经理,并在bug报告中链接到它。有人发现我的修复程序中存在错误,编写了另一个补丁,而那个补丁被接受了。
现在,handle-empty-fields中的代码已经无用了:它不正确,也不能再应用到代码中,但它已经在那个bug报告中被引用了。
我应该怎么办?保留这个分支吗?我很快就会有大量的废弃分支,git没有办法将一个分支标记为废弃或关闭。删除该分支吗?但是查看那个bug报告的人会发现它,结果得到404错误。
通常建议人们不要对他们的仓库进行变基,因为这会给其他开发人员,特别是下游开发人员带来问题。那么对于功能或错误修复分支有哪些建议呢?
更新:看起来github从不删除包含在拉取请求中的提交。因此,如果您将更改推送并将其转换为拉取请求,则稍后可以删除该分支,而不会丢失任何更改。好吧,只要github还在运作就行了 ;)。

相关问题:https://dev59.com/0nM_5IYBdhLWcg3wmkau - Michał Politowski
4个回答

17

我的做法是给分支打上标签。使用完整的标签并给它一个描述性的名称。然后你可以删除该分支,以便它不会在分支列表中显示,但因为它被标记了,所以分支仍然可以通过检出该分支来重新创建。标记上的所有提交仍然可用,并且在 git gc 中不会丢失任何提交。也许像这样:

git tag -a partialBugfixXXX -m"Tagging a branch that went into fixing bug XXX"

这是一个不错的想法。它并不完美,因为它只是将问题从分支列表移动到标签列表,但至少很少需要查看标签列表,而分支列表通常是经常看到的东西。 - gioele
补充一句:你可以采用标签命名约定,例如在短期分支的标签名称前加上“branch-”前缀。然后你就可以过滤标签列表,或者对其进行排序。 - sleske

12

git update-ref refs/Attic/handle-empty-fields refs/heads/handle-empty-fields

作为保留未使用分支的一种替代方案,可以使用一个单独的refs命名空间。好处是标签列表不会变得混乱。缺点是需要从Git的表面层转到深度层次。


这种类型的引用会被推送到远程仓库吗? - gioele
@gioele它们是可推送的,因为任何ref都是可推送的。但默认情况下它们不会被推送,需要在命令行或配置中使用适当的refspec。 - Michał Politowski

2
我认为这将取决于确切的情况。可能的解决方案:
  • 向错误报告添加评论,说明提到的分支被证明是无用的并已删除。如果您觉得该分支有一些价值,请简要描述您所做的事情。这样,即使分支不存在,人们也能获得必要的信息。

  • 保留该分支,但以某种方式重命名它以标记其为“废弃”。在错误报告中添加注释以指示此事项(并更改分支链接)。例如,您可以使用一些约定,如在分支名称前缀中加入“OLD-”。

  • 标记该分支,然后删除它(并再次在错误数据库条目中提到此事项)。这样,可以删除该分支,但提交仍可通过标记访问。请注意,git为标记(和分支)提供了简单的名称空间-您可以在名称中包含“/”。您可以协商一项约定,例如使用“oldbranch /”下的标记。(改编自Abizern的答案。

  • 一旦合并了该分支,您只需在错误报告中提及/链接合并提交即可。然后,该分支可能变得不那么有趣,因为它包含在合并提交中。

一般来说,您可能希望采用特殊的命名约定来修复错误的分支。

在我的(个人)git repo中,对于我发现的每个错误,我首先在错误数据库中打开一个错误。如果我然后进行操作,则创建一个以错误ID结尾的分支(例如“opencrash-342”,“handle_empty_file-663”)。这样,错误数据库和分支之间的关系就很明显了。

此外,如果分支列表过长,您始终可以按附加的ID进行过滤(例如,制作已关闭错误的列表,并编写一些小脚本将其从“git log”等的输出中过滤出来)。


4
过滤的问题在于我可能是唯一一个安装了这样过滤脚本的人,其他人都会看到那些无用的分支。 - gioele

1

这只是我的观点,但我想你可以随意删除任何没有有用代码的分支。在最坏的情况下,如果有人某一天查看了该错误报告,并发现链接到被拒绝的错误修复的链接已经失效...嗯,我认为这对任何人来说都不像是一个大问题。


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