0

设想:

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

描述:

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

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

我知道我可以通过挑选 {hash of first commit on fixForV1} ^..{hash of last commit on fixForV1} 来实现这一点。有没有更好的方法来做到这一点?

4

1 回答 1

1

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

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

如果你很幸运,所有补丁都可以顺利应用,那么你就完成了。如果不走运,请按顺序逐一应用补丁,然后相应地修复冲突。

于 2015-04-24T12:55:42.097 回答