【问题标题】:Git best practices when creating multiple test branches创建多个测试分支时的 Git 最佳实践
【发布时间】:2018-04-27 07:25:40
【问题描述】:

我最近开始使用 git 中的分支功能来维护我的 github 项目,并且我了解如何创建分支、在它们之间切换和合并它们。但是,我见过的大多数示例都涉及创建一个非 master 分支,然后如果要保留更改,则将新分支与 master 合并。我还没有找到多个并行测试分支的示例。

例如,我正在尝试改进我的一个脚本,并且我有三个不同的相互排斥的改进想法,所以我让three new branches.我测试不同分支的性能,decide to keep one.

我是否应该只删除我不想要的两个分支,然后将最终分支与 master 合并?是否会保留这些分支的提交,以便我可以在必要时重新访问它们,或者删除分支也会删除这些提交?

我是唯一的贡献者,因此与其他贡献者发生冲突没有问题。

【问题讨论】:

    标签: git github merge version-control


    【解决方案1】:

    如果您删除其他分支,这不会立即删除提交;但是如果你不引用提交,那么它们最终会被删除。有一个“垃圾收集”进程(gc)在特定时间(或当您要求它运行时)运行,其任务之一是清理“无法访问”的对象(例如既未指向的提交)是一个 ref,也不是由其他可达提交的父指针指向)。

    因此,如果您想保留提交以供将来参考,您可能不想删除分支。或者,如果你确实想删除分支——这样它们就不会出现在“取消合并分支”列表中,或者类似的东西——那么你可以标记每个分支的头部,然后删除分支。

    另一种选择是合并每个“错误”分支,然后恢复合并

    A -------------- M1 - W1 - M2 - W2 - M3 <--(master)
     \              /         /          /
      x1 -- x2 -- x3         /          /
       \                    /          /
        y1 -- y2 -- y3 -- y4          /
         \                           /
          z1 - x2 - x3 - x4 - x5 - x6
    

    在这个例子中,如果你有 branch_xbranch_y 的解决方案你决定不保留,branch_z 有一个你决定保留的解决方案,你可以说

    git checkout master
    git merge x
    git revert HEAD
    git branch -d x
    git merge y
    git revert HEAD
    git branch -d y
    git merge z
    git branch -d z
    

    这会告诉 git 你已经考虑了所有三个分支的变化,但只想保留来自z 的变化。这样可以确保提交保持可访问性,因此它们不会被垃圾收集,并且可以让您删除分支。

    另一方面,实际上 finding 旧的提交,除非你标记它们,否则可能会很麻烦 - 如果你要标记它们以便以后可以找到它们,那么它将它们合并到您的 master 中可能没有意义,它们可能会使历史记录混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 2017-05-27
      • 1970-01-01
      • 2011-06-29
      • 2020-02-05
      • 2023-04-08
      相关资源
      最近更新 更多