Git merge只修复,没有其他分支的合并

时间:2012-07-04 09:37:45

标签: git merge branch

我们处境很复杂。我们有这个存储库之王:

        C1      C4              C5
devel   *---*---*---*-----------*---------
              \_____
                    \    C2    C3      
fix-ie  *--*---------*----*----*-------*---
                     M1                 \___
                                            \
testing *----*-------------------------------*---
                                             M2

如您所见,devel在fix-ie branch中合并。

问题是“测试”分支不应该有“devel”提交(我们不想要C1)但我们需要合并修复 - 即在“测试”中只有C2和C3提交

如果我这样做:

git checkout testing
git merge fix-ie

我将在我的测试分支中合并M1 ...所以在我们的测试分支中找到了C1 commit。那不是我们想要的。

如何避免这种情况?

请记住,我简化了示例,我们的fix-ie和devel分支中有很多合并,很多提交。

谢谢:)

2 个答案:

答案 0 :(得分:0)

一种方法是创建一个单独的fix-ie分支,从devel分支中排除合并提交。然后,您可以将该分支合并到testing分支。

您可以使用git reflog show -all搜索您的reflog,以查找您要忽略的devel分支的合并提交。

答案 1 :(得分:0)

我似乎找到了解决方案。

获取第一个合并SHA,例如名为“123abc”。我能做到:

git rev-list --no-merges --reverse --topo-order debug-ie ^123abc

然后每一行都是提交,但列表中没有合并。

所以我能做的就是:

for SHA in $(git rev-list --no-merges --reverse --topo-order debug-ie ^123abc); do
    git cherry-pick $SHA
done

如果我错了,请告诉我......但这似乎是一个好主意。