代码之家  ›  专栏  ›  技术社区  ›  lprsd

樱桃采摘与再加工

  •  3
  • lprsd  · 技术社区  · 15 年前

    以下是我通常面临的一种情况:

    您有一组提交 master design production

    我倾向于创建一个新的分支,其基础是 生产 生产

    当我合并的时候 主人 对于生产,我面临合并冲突,因为即使更改是相同的,但由于cherry pick而注册为不同的提交。

    我已经找到了一些解决方法来处理这个问题,所有这些方法都很费劲,可以称之为“黑客”。

    我应该在我采摘樱桃的地方使用重新定位。与此相比还有什么其他优势呢。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Community Mohan Dere    8 年前

    你应该做个决定 rebase --interactive 您的设计分支位于生产之上,其中:

    • 您可以重新排序提交,从生产中需要的提交开始
    • 然后可以将产品合并到要合并的最后一个设计提交(快进)
        -x--x--x1--x--x2 (design)
          \
           p--p (production)
    

    x1和x2需要包括在生产中:

    git checkout design
    git rebase --interactive production
    
    -x
      \
       p--p (production)
           \ 
            x1'-x2'--x'--x' (design)
    

    然后:

    git checkout production
    git merge x2'
    -x
      \
       p--p--x1'--x2' (production)
                    \
                     x'--x' (design)
    

    您可以:

    • 根据生产承诺验证当前设计承诺(在重新调整基础期间)
    • 重新排序设计
    • 允许从设计到生产的后续合并是一个快速推进的合并。

    Lakshman Prasad

    我也会这么做,但是只为操作创建了一个私有分支:

    git checkout master
    git checkout -b master-private
    
        -x--x--x1--x--x2 (master, master-private)
          \
           p--p (production)
    

    ,然后是rebase,这次是私有分支(也就是说,你永远不会推的分支)。

    git rebase --interactive production
    
    -x--x--x1--x--x2 (master)
      \
       p--p (production)
           \ 
            x1'-x2'--x'--x' (master-private)
    

    然后:

    git checkout production
    git merge x2'
    
    -x--x--x1--x--x2 (master)
      \
       p--p--x1'--x2' (production)
                    \
                     x'--x' (master-private)
    

    master 不会从提交重新排序中获益(具有更合理的顺序),但至少可以推送 你想什么时候都行。

    以及 production
    如果后续承诺 主人 生产 ,其他将稍后),我将:

    • 删除 master-private (我们真的不在乎那些x',x的副本来自主人)
    • 制造 主专用 母版上的分支
    • 用粗糙的冲突解决策略(除了第一次犯下的错误) 主专用 分支,因为这些分支需要集成到 分公司)
        -x--x--x1--x--x2--x--x3--x (master)
          \
           p--p--x1'--x2'--x3' (production)
                       |     \
                       |      x''--x'' (master-private)
                        \
                         x'..x' (old x' from the first master-private)