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

如何处理实验性的非合并git分支?,git,github,feature-branch,Git,Github,Feature Branch,git分支的当前最佳实践是什么?这些分支是为了测试一个bug的解决方案而创建的,但由于审查过程表明它们是错误的,或者有更好的解决方案而没有被合并 举个例子。Project fizzbuzz有一个bug报告,报告在空字段上崩溃 我创建了一个新的分支处理空字段,并向该分支提交了两个“解决”问题 然后我将该分支提交给fizzbuzz项目经理,并将其链接到bug报告中 有人在我的修复中发现错误,编写了另一个补丁,该补丁被接受 现在,handle empty fieldsmy code中的代码是无用的

git分支的当前最佳实践是什么?这些分支是为了测试一个bug的解决方案而创建的,但由于审查过程表明它们是错误的,或者有更好的解决方案而没有被合并

举个例子。Project fizzbuzz有一个bug报告,报告在空字段上崩溃

  • 我创建了一个新的分支
    处理空字段
    ,并向该分支提交了两个“解决”问题
  • 然后我将该分支提交给fizzbuzz项目经理,并将其链接到bug报告中
  • 有人在我的修复中发现错误,编写了另一个补丁,该补丁被接受
现在,
handle empty fields
my code中的代码是无用的:它是不正确的,不能再应用于代码,但它已在该bug报告中引用

我该怎么办?留着树枝?我很快就会得到几十个废弃的分支,git无法将一个分支标记为废弃或关闭。移除分支?但是,人们看到这个bug报告就会发现它并得到404

人们经常被建议不要重新设置存储库的基础,因为这会给其他开发人员,尤其是下游开发人员带来问题。对于功能或bug修复分支有什么建议


更新:看起来github从未删除拉请求中包含的提交。因此,如果您推送更改并将其转换为拉取请求,您可以稍后删除分支,而不会丢失任何更改。嗯,当github还在工作时;)

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

我认为这将取决于具体情况。可能的解决办法:

  • 在bug报告中添加一条注释,表明所提到的分支结果是无用的,并且已被删除。如果你觉得分支有一些价值,简要描述一下你做了什么。这样,即使分支机构不存在,人们也能获得必要的信息

  • 保留分支,但以某种方式重命名它以将其标记为“已放弃”。在bug报告中添加一条注释以表明这一点(并更改分支的链接)。例如,您可以有一些约定,比如在分支名称前加上前缀“OLD-”

  • 标记分支,然后将其删除(并在bug db条目中再次提及)。这样可以删除分支,但仍然可以通过标记访问提交。请注意,git为标记(和分支)提供了简单的名称空间——您可以在名称中包含“/”。您可以就约定达成一致,例如在“oldbranch/”下使用标记。(改编自阿比泽恩的回答。)

  • 一旦分支被合并,您就可以在bug报告中提及/链接合并提交。那么分支可能就不那么有趣了,因为它包含在合并提交中

通常,您可能希望对修复错误的分支采用特殊的命名约定

在我(个人)的git repo中,对于我发现的每个bug,我首先在bug数据库中打开一个bug。如果我接着处理它,我会创建一个分支,其名称以bug ID结尾(例如“opencrash-342”、“handle\u empty\u file-663”)。这样,bug DB和分支之间的关系就很明显了


此外,如果分支列表太长,您可以始终根据附加的ID进行过滤(例如,制作一个已关闭bug的列表,以及一些小脚本,以从“git log”等的输出中过滤这些bug)。

我这样做的方式是给它一个标记。使用完整标记并为其指定描述性名称。然后,您可以删除该分支,这样它就不会显示在分支列表中,但因为它已标记,所以仍然可以通过签出该分支来重新创建该分支。标记上的所有提交仍然可用,并且在
git gc
中不会丢失任何提交,例如:

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

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


作为在标记中保留死分支的替代方法,可以使用单独的refs命名空间。好处是标签列表保持整洁。缺点是从瓷器级转到git的管道级。

过滤的问题是,可能只有我安装了这样的过滤脚本,其他人都会看到所有无用的分支。这是个好主意。这并不完美,因为它只是将问题从分支列表转移到标记列表,但至少很少参考标记列表,而分支列表通常是人们经常看到的。为此,您可以采用一些标记命名约定,例如在短期分支的标记名前加上“branch-”。然后你可以过滤标记列表,或者只是对其排序。这些类型的引用会被推送到远程repo吗?@giole它们是可推的,就像任何引用都是可推的一样。但是默认情况下不会推送它们,在命令行或配置相关问题中需要适当的refspec: