1

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

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

如您所见,devel 被合并到 fix-ie 分支中。

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

如果我做:

git checkout testing
git merge fix-ie

我将在我的测试分支中进行 M1 合并...所以在我们的测试分支中可以找到 C1 提交。这不是我们想要的。

如何避免这种情况?

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

谢谢 :)

4

2 回答 2

0

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

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

于 2012-07-04T11:27:59.577 回答
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

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

于 2012-07-04T12:57:44.367 回答