Git merge/cherry-pick 分支的所有提交
Git merge/cherry-pick all commits of a branch
场景:
master
|
\
dev
|
\
feature1
|
|
|
/
|
/
tagV1
|
\
feature2
|
|
/
|
/
tagV2
|
\
fixForV1
|
|
/
|
/
tagV1_1
描述:
- 创建存储库
- 创建并签出分支 dev
- 创建并签出分支功能 1 .. 实现功能
- 检查开发并合并 feature1,删除 feature1
- 结帐主合并开发
- 创建标签V1(将交付给客户)
- 结账开发
- 创建并签出分支功能 2 .. 实现功能
- 检查开发并合并 feature2,删除 feature2
- 结帐主合并开发
- 创建 tagV2(将交付给相同或不同的客户)
- 结账开发
- 创建并签出分支 fixForV1 .. 实施修复
- 检查开发并合并 fixForV1
- ???
15…
我们需要合并 tagV1 和在 fixForV1 上所做的提交(不包括在 feature2 上所做的提交)。合并后,我们将创建一个新标签 tagV1_1 并将其交付给客户。
我知道我可以通过挑选 {在 fixForV1 上进行的第一次提交的哈希} ^..{在 fixForV1 上进行的最后一次提交的哈希} 来实现这一点
有一个更好的方法吗?
如果我没看错你的需求,你也可以这样操作:
git checkout fixForV1
git format-patch tagV2
-- 获取tagV2到fixForV1头部的所有补丁
git checkout -b branchV1 tagV1
-- 根据tagV1新建分支
git apply *.patch
-- 应用我们在步骤 1 中生成的补丁
如果幸运的话,所有补丁都可以毫无问题地应用,那么您就大功告成了。如果运气不好,请按顺序一个一个地应用补丁,然后相应地修复冲突。
场景:
master
|
\
dev
|
\
feature1
|
|
|
/
|
/
tagV1
|
\
feature2
|
|
/
|
/
tagV2
|
\
fixForV1
|
|
/
|
/
tagV1_1
描述:
- 创建存储库
- 创建并签出分支 dev
- 创建并签出分支功能 1 .. 实现功能
- 检查开发并合并 feature1,删除 feature1
- 结帐主合并开发
- 创建标签V1(将交付给客户)
- 结账开发
- 创建并签出分支功能 2 .. 实现功能
- 检查开发并合并 feature2,删除 feature2
- 结帐主合并开发
- 创建 tagV2(将交付给相同或不同的客户)
- 结账开发
- 创建并签出分支 fixForV1 .. 实施修复
- 检查开发并合并 fixForV1
- ???
15… 我们需要合并 tagV1 和在 fixForV1 上所做的提交(不包括在 feature2 上所做的提交)。合并后,我们将创建一个新标签 tagV1_1 并将其交付给客户。
我知道我可以通过挑选 {在 fixForV1 上进行的第一次提交的哈希} ^..{在 fixForV1 上进行的最后一次提交的哈希} 来实现这一点 有一个更好的方法吗?
如果我没看错你的需求,你也可以这样操作:
git checkout fixForV1
git format-patch tagV2
-- 获取tagV2到fixForV1头部的所有补丁git checkout -b branchV1 tagV1
-- 根据tagV1新建分支git apply *.patch
-- 应用我们在步骤 1 中生成的补丁
如果幸运的话,所有补丁都可以毫无问题地应用,那么您就大功告成了。如果运气不好,请按顺序一个一个地应用补丁,然后相应地修复冲突。