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

Git merge/cherry-pick all commits of a branch

场景:

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

描述:

  1. 创建存储库
  2. 创建并签出分支 dev
  3. 创建并签出分支功能 1 .. 实现功能
  4. 检查开发并合并 feature1,删除 feature1
  5. 结帐主合并开发
  6. 创建标签V1(将交付给客户)
  7. 结账开发
  8. 创建并签出分支功能 2 .. 实现功能
  9. 检查开发并合并 feature2,删除 feature2
  10. 结帐主合并开发
  11. 创建 tagV2(将交付给相同或不同的客户)
  12. 结账开发
  13. 创建并签出分支 fixForV1 .. 实施修复
  14. 检查开发并合并 fixForV1
  15. ???

15… 我们需要合并 tagV1 和在 fixForV1 上所做的提交(不包括在 feature2 上所做的提交)。合并后,我们将创建一个新标签 tagV1_1 并将其交付给客户。

我知道我可以通过挑选 {在 fixForV1 上进行的第一次提交的哈希} ^..{在 fixForV1 上进行的最后一次提交的哈希} 来实现这一点 有一个更好的方法吗?

如果我没看错你的需求,你也可以这样操作:

  1. git checkout fixForV1
  2. git format-patch tagV2 -- 获取tagV2到fixForV1头部的所有补丁
  3. git checkout -b branchV1 tagV1 -- 根据tagV1新建分支
  4. git apply *.patch -- 应用我们在步骤 1 中生成的补丁

如果幸运的话,所有补丁都可以毫无问题地应用,那么您就大功告成了。如果运气不好,请按顺序一个一个地应用补丁,然后相应地修复冲突。