代码之家  ›  专栏  ›  技术社区  ›  Christian Oudard

如何在Git中反向导出提交?

git
  •  37
  • Christian Oudard  · 技术社区  · 15 年前

    所以,我的项目中有一个维护分支和一个主分支。如果我在维护分支中进行了一次提交,并希望将其向前合并到主分支,那么很容易:

    git checkout master; git merge maintenance
    

    但是如果我想换一种方式,即向我的维护分支应用一个对master所做的承诺,我该怎么做呢?这算是摘樱桃吗?如果我再次向前合并维护分支,它会导致问题或冲突吗?

    6 回复  |  直到 8 年前
        1
  •  33
  •   mwalling    15 年前

    这正是 git-cherry-pick

    git checkout maintenance
    git cherry-pick <commit from master>
    
        2
  •  15
  •   Jakub Narębski adamtaub    8 年前

    使用的替代解决方案” git cherry-pick (如其他回复中所建议的)将是 为修复创建单独的[主题]分支 关闭维护分支,并将此分支首先合并到维护分支,然后再合并到主分支(主干)。

    此工作流(有些)在 Resolving conflicts/dependencies between topic branches early Git维护人员Junio C Hamano的博客帖子。

    樱桃采摘结果 重复提交 这可能会在合并或重新平衡时造成问题。基于主题分支的工作流只保留修复程序的一个副本。

        3
  •  0
  •   Michael Krelin - hacker    15 年前

    是的,它被认为是樱桃采摘,而不是, 通常地 它不应该带来问题。如果在反向移植时提交不干净,那么当Cherry选择它时,您可能会面临完全相同的冲突。

        4
  •  0
  •   Brenton Alker    15 年前

    作为一般规则,我使用合并将更改“向上”移动到树上(从维护到主控),然后重新平衡将更改“向下”移动到树上(从主控到维护)。这样就维护了主分支中的提交顺序。

    基本上,REBASE将当前分支上的所有更改回滚到fork(或最后一个REBASE),复制较新的更改,然后重新应用更改。

    如果你不想 全部的 从主人的变化,那么你可能需要樱桃选择你想要的。

        5
  •  0
  •   boombatower    12 年前

    对于无法使用git cherry pick应用的复杂提交,可以尝试

    git checkout -b merge-branch master
    git rebase --onto=`git merge-base master maintenance` HEAD~1 && git rebase master
    

    解释: http://blog.boombatower.com/automatically-backport-commits-using-git .

        6
  •  0
  •   Adam Spiers    9 年前

    正如其他人已经说过的,采摘樱桃可能是最好的选择。我只是想补充一下,在挑选樱桃期间的冲突通常可以通过检查您要挑选樱桃的承诺的“依赖性”来解决,并且我已经构建了 a tool called git-deps 检测和可视化这些依赖关系。如果您访问主页,您将看到两个YouTube视频:第一个是该工具的一般介绍,第二个演示了如何在挑选樱桃时使用它来避免冲突。