Git merge / cherry-pick一个分支的所有提交

时间:2015-04-24 12:32:57

标签: git merge tags git-branch git-cherry-pick

场景:

master
|
\
  dev
  |
  \
    feature1
    |
    |
    |
   /
  |
  /  
tagV1
  |
  \
    feature2
    |
    |
   /
  |
 /
tagV2
  |
  \
    fixForV1
    |
    |
   /
  |
  /  
tagV1_1

说明

  1. 创建回购
  2. 创建并结帐分支开发
  3. 创建和结帐分支功能1 ..实现功能
  4. 结帐开发和合并功能1,删除功能1
  5. Checkout master merge dev
  6. 创建tagV1(将交付给客户)
  7. Checkout dev
  8. 创建和结帐分支功能2 ..实现功能
  9. 结帐开发和合并功能2,删除功能2
  10. Checkout master merge dev
  11. 创建tagV2(将交付相同或不同的客户)
  12. Checkout dev
  13. 创建并结帐分支fixForV1 ..实施修复
  14. 结帐开发并合并fixForV1
  15. ???
  16. 15 ... 我们需要合并tagV1和在fixForV1上进行的提交(不包括在feature2上进行的提交)。合并后,我们将创建一个新的标签tagV1_1并将其传递给客户。

    我知道我可以通过在fixForV1上做一次樱桃挑选{哈希首次提交}来实现这一目标^ .. {在fixForV1上做的最后一次提交的哈希} 有一个更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的要求,您也可以这样工作:

  1. git checkout fixForV1
  2. git format-patch tagV2 - 从tagV2获取所有补丁到fixForV1
  3. 的头部
  4. git checkout -b branchV1 tagV1 - 根据tagV1
  5. 创建一个新分支
  6. git apply *.patch - 应用我们在步骤1中生成的补丁
  7. 如果运气好的话,所有补丁都会毫无问题地应用,然后你就完成了。如果不幸运,请逐个应用补丁,然后相应地修复冲突。