【问题标题】:Git --no-merged with --squashGit --no-merged 与 --squash
【发布时间】:2014-03-24 12:40:47
【问题描述】:

我更喜欢将我的功能分支与--squash 合并,因为它可以让我跟踪添加功能的时间,而且通常是我需要bisect 打开的完整功能。我发现这可以很好地表示稳定分支随时间变化的状态。

但是,当使用 --squash 时,合并的分支出现在 --no-merged 下而不是 --merged 下。 这使得有时难以跟踪每个分支的状态(即何时完成的)。我不想删除“完成”的分支,因为碰巧我不得不检查它们以进一步平分以及其他原因(有时问题需要多条攻击路径才能解决,我发现它很有价值记录下来)。

有什么办法:

  • --merged--no-merged 认识到压缩的分支实际上已被合并。

  • 存档合并(压缩)的分支,因为它们不会出现在任一列表中,但如果我需要它们仍然可用。

如果可能的话,我实际上更喜欢第二种解决方案。有相当多的非当前分支累积并隐藏它们将更容易在列表中搜索我正在寻找的当前分支。

【问题讨论】:

    标签: git merge branch squash


    【解决方案1】:

    分支被合并,当且仅当另一个分支将它们作为直接或间接父级(即,当跟随提交的父级时,您有时会到达该分支)。这一点也不例外。

    当您压缩更改时,您正在创建一个新的提交对象,该对象同时包含来自该分支的所有更改。所以你有一个用于那个提交的“新分支”,而旧分支保留下来以保持原始提交可用。现在当你合并时,你合并了那个提交,所以只有那个分支被合并了。

    所以不,当您压缩更改时,仍然包含单个提交的原始分支不会被识别为合并,仅仅是因为它没有合并。也没有办法改变这种行为,或者“归档”一个分支。你唯一能做的就是为分支创建一个标签,作为标记,这样你就可以删除分支本身。

    但是,正确的方法是合并整个分支。特别是如果您说您希望原始分支“在 [您] 需要时仍然可用”。如果你想要这样,那么你应该只保留原始分支历史中,所以它是历史的真实部分。

    如果你担心历史的可读性,你应该考虑一直进行非快进合并,这样你合并的分支总是单独出现在一边。

    【讨论】:

      【解决方案2】:

      您可以正常合并(不压缩)并在您的 git 命令中使用 --first-parent 选项。例如

      git log --first-parent
      

      “简化”历史。这会将功能分支简化为仅合并提交条目,您将看不到合并分支上的提交。

      【讨论】:

        猜你喜欢
        • 2013-10-18
        • 2013-05-25
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        • 2013-03-01
        • 2019-10-09
        • 2013-02-13
        相关资源
        最近更新 更多