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

Git修补分支的子范围的最佳方法是什么?

git
  •  20
  • jscoot  · 技术社区  · 16 年前

    在Subversion中,使用“svn merge-r a:b mybranch”很容易合并来自分支的一系列变更集/差异。但在Git中,我发现只有从一个分支中挑选一个提交才能将该补丁应用到我当前的工作分支。所以我想知道是否有一种快速的方法可以将bugfix分支中两个标签之间的所有提交应用到我当前的主分支?

    3 回复  |  直到 13 年前
        1
  •  47
  •   CB Bailey    16 年前

    执行所需操作的最简单方法是 git rebase . 这是一个食谱。假设标记A是您要选择的补丁系列的基础上的提交,而标记B是该系列中最后一个补丁的提交。另外,假设br是当前分支的名称,以及应用新补丁系列的分支。

    # Checkout a new temporary branch at the current location
    git checkout -b tmp
    
    # Move the br branch to the head of the new patchset
    git branch -f br B
    
    # Rebase the patchset onto tmp, the old location of br
    git rebase --onto tmp A br
    
        2
  •  5
  •   Bertrand Marron    13 年前

    我发现最简单的方法是:

    git cherry-pick starthash..endhash
    

    注意,这两个点没有空格将它们与散列标签分开。

        3
  •  4
  •   Eduard - Gabriel Munteanu    16 年前

    据我所知,你不能 合并分支 这种方式。合并的目的是连接两个具有共同历史的分支,而不是用于获取多个提交或修补程序系列。我觉得挑选樱桃基本上是你想要的。

    你可以使用 吉特樱桃 (不是) 樱桃摘 !)要找出哪些提交应该插入到您的分支中,那么 樱桃樱桃 他们。你也可以明确地问 樱桃樱桃 记录下这些承诺的来源,以防你从一个公共分支机构挑起了风头。这可能是解决这个问题的最佳方法。(另一个可能是通过 Git格式修补程序 然后用git-am/git-apply导入它们,但这可能会慢一些,而且不会记录提交的来源。)

    编辑:“公共”(分支)应理解为不受历史编辑的内容。当然,在不公开代码的情况下开发闭源代码软件时可以这样做。