代码之家  ›  专栏  ›  技术社区  ›  Simon H

Git:将两个分支之间的差异直接应用于master

git
  •  0
  • Simon H  · 技术社区  · 4 年前

    我有一个分支b1,还有一个基于b1的b2。我现在可以看到b2不依赖于b1,我想根据差异创建一个PR b2 - b1 并将其提交给master进行合并。

    如果我将其设置为与b1进行比较,我可以在github上看到差异(见图),但不知道如何将其提取为单独的PR。

    diff summary

    我想我需要将diff保存到一个文件中,然后从master创建一个分支来应用它。

    根据@LeGEC的请求,这是结果

    * ec82b57a7 (origin/sh/datatree-queries, sh/datatree-queries) tidier
    * ddcb05459 tidier
    * 6ebb2199f tidier
    * 10e3a5e0f clipboard items
    * ff08a1310 wip - UI
    * 0169a4dbe insert entire query ast
    | * 4e8a00c1a (HEAD -> sh/datatree-fx, origin/sh/datatree-fx) revert
    |/  
    o 63d147bc7 Merge remote-tracking branch 'origin/master' into sh/datatree-fx
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   LeGEC    4 年前

    您可以使用 git rebase 采取具体承诺 b2 并在master上回放它们:

    # the following command says :
    #  - apply on master
    #  - the list of commits starting from 'b1' ('b1' excluded)
    #  - up to 'b2' ('b2' included)
    git rebase --onto master b1 b2
    

    然后打开一个PR b2


    [编辑]

    在您的情况下: b1 有额外的承诺,这解释了行为上的差异:

    • git rebase --onto master b1 b2 将仅选择图左侧的6个提交,
    • git diff b1 b2 另一方面,还考虑了与 revert 犯罪

    在你的情况下:创建补丁并应用它是达到你想要的结果的有效方法。

        2
  •  1
  •   Simon H    4 年前

    从那以后,我发现 How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?

    有效的方法是转到repo的根目录,然后

    git diff sh/datatree-fx sh/datatree-queries > mydiff.diff
    git apply mydiff.diff