我们处境很复杂。我们有这个存储库之王:
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分支中有很多合并,很多提交。
谢谢:)
答案 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
如果我错了,请告诉我......但这似乎是一个好主意。